![]() |
problema al insertar en bd access
Hola a todos!!
Tengo un problema muy tonto, pero que me está volviendo medio majara. Intento ejecutar la siguiente sentencia desde Delphi7, por ODBC contra una BD Access, y con un componente Tquery: insert into Tclase1 (id,c1,m2,i3) values (35,' :" '' :','aa',22) Y me da un error de "missing right quote" y no lo acabo de entender... porque la comilla simple la estoy "escapando" con otra comilla simple.. la comilla doble si la pongo sola me la inserta bien... y los dos puntos lo mismo.. pero con segun que combinación, peta! El campo en cuestión puede ser de tipo char o de tipo memo, el resultado es el mismo. He probado hacerlo con params, pero.. me da otro tipo de error al pasarle un parámetro memo como .asmemo :S:S:S En resumen, todavía no he conseguido poder insertar cualquier cosa en un campo de access desde delphi sin hacer ningun "chanchullo", y ya llevo tiempo probando. A alguien se le ocurre algo? Muchas Gracias!! Manolo. |
Cita:
(1) Una opción es que te hayas equivocado en las centrales y deban ser una doble. insert into Tclase1 (id,c1,m2,i3) values (35,' :" " :','aa',22) (2) Otra opción es que las centrales deban ser una simple, con lo que tendrías que colocar 3 seguidas. insert into Tclase1 (id,c1,m2,i3) values (35,' :" ''' :','aa',22) ¿No se si me he explicado? |
Buenas!
También te sugiero que en lugar de poner los valores "a piñón" en la sentencia SQL utilices parámetros, te ahorrarás problemas de este tipo Edu |
hola!
Buenas!
Priimero, gracias a los 2 por contestar tan rapido! La opción buena es la 2, es decir, quiero insertar los dos puntos, una comilla doble y una comilla simple. Lo que no entiendo es porqué dices que para insertar una comilla simple tengo que poner tres comillas :S. De todas formas, lo he probado por si acaso pero no va. Lo curioso es que si lanzo mi insert original: insert into Tclase1 (id,c1,m2,i3) values (35,' :" '' :','aa',22) desde el SQLExplorer funciona perfectamente, pero desde delphi no :S Por otro lado, con los parametros es cierto que este problema desaparece, pero me aparece otro :S Se trata de que al intentar pasar algo como parametro a un memo así: parambyname('loquesea').asmemo:='aquivaalgo' tengo el mismo problema, dependiendo de lo que valga el 'aquivaalgo', sobre todo si le inserto comillas dobles ( otra vez grrr ) me da un error de "string truncado por la derecha" :S:S y si se lo paso asi: parambyname('loquesea').asstring:='aquivaalgo' entonces no hace cosas raras, pero solo me deja insertar 255 caracteres, y necesito mas!! Siento el rollo pero es que lo he probado de tantas formas y con tantos casos, que estoy desesperado!! Si alguien lo prueba con codigo y le funciona, que me lo pegue aqui por dios!! Mushas gracias! Manolo. |
A ver, de dónde sale el texto largo? Si es de un TMemo, siempre puedes hacer paramByName('param').AsMemo := Memo1.Text y no tendrás problemas de longitudes!
Y si el texto es fijo, ten en cuenta que siempre tendrás de doblar las comillas, pero ojo no poner comillas dobles, sino poner dos veces las comillas simples, y en principio no tendría porque haber problema. Un saludo Edu |
puesss...
... en teoria no tendría que haber problemas, lo se.. pero los hay!!
He probado que el texto salga de un tmemo, pero hace lo mismo.. y lo fuerte es que si en el memo pongo, por ej. 12345678901234 funciona ok. Pero si pongo 1234567890123456 ( longitud 16, :S:S:S) entonces me da el error!!! Se habrá vuelto loco mi PC? Al que encuentre el error le pago unas birras por Barcelona! Manolo. |
Cita:
* Si colocas 1, delphi piensa que es una cadena sin acabar. * Si colocas 2 delphi piensa que son el principio y el final de una cadena, que dentro no tiene nada. * La forma de decirle a Delphi que coloque una comilla simple, es colocar tres, para que el encuentre el inicio, la cadena (comilla simple) y el final (en total 3 comillas). En lugar de colocar esto: ,' :" '' :', coloca esto: ,QuotedStr(':" ''' :'), |
Buenas!
Me puedes pasar el código? Me ha interesado el tema de las birras por Barcelona! jejejejeje Edu |
tres comillas?
Neftali, con que version de delphi? yo uso la 7 ( aun ) y si le asigno a un string tres comillas simples:
str:='''; el compilador ni compila! De hecho de toda la vida yo he trabajado que para poner una comilla dentro de un string desde delphi, tienes que poner una comilla delante, osea, cada 2 comillas es una comilla, y siempre me ha funcionado ok. Es decir, str:=''''; es una cadena que contiene una comilla simple dentro. Manolo. |
el codigo...
... a ver, que he hecho un proyecto mu simple y sigue fallando, ahora falla cuando quiere, no depende de la longitud...
y los .dfm del database y de la query
He probado con el unprepare, sin el unprepare y con el close, con los dos.. dandole tiempo despues del prepare a que se prepare bien (cosas mas raras he visto ) ... con otros nombres de params (param0, param1 ) que no coincidan con los nombres de la tabla.. y nada! Manolo. |
Cita:
Tienes razón, tienes razón, tienes razón,... Se me ha ido la olla y se me han cruzado los cables; Estaba con otra cosa... Ni caso, no me hagáis ni caso... Siento el fallo; lo dicho, ni caso... |
Buenas!
En l línea del parambyname del marámetro m2, cambia asmemo por value, así te pilla tipo variant y a ver qué tal! Edu |
nada...
... lo mismo ... :(
Manolo. |
La franja horaria es GMT +2. Ahora son las 02:39:15. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi