![]() |
Insertar registros en Firebird
Hola amigos del foro, mi pregunta viene porque he estado intentando insertar unos registros pero no he podido lograr hacerlo.
de antemano mil gracias |
¿Y por qué no has podido?
|
veras, yo conecto la base de datos y pongo el SQLtransaction. luego pongo el SQLQuery y en la propiedad de InsertSQL pongo la sentencia adecuada.
el problema es que cuando cierro la conección, se pierden los registro. Al finalizar la inserción yo pongo y eso debería ser suficiente pero no...:mad: De antemano mil gracias por vuestro tiempo y aportes |
¿No habrás olvidado hacer 'post' después del insert?
|
Haz caso a Casimiro:
Un Saludo. |
hola amigos, yo en lazarus escribo asì:
y eso debería ser suficiente para insertar los registros... pero no funciona:mad: |
¿No has leído el código que te ha puesto marcoszorrilla? :confused:, no es suficiente con que hagas el 'insert', debes hacer 'post' y luego 'commit', te falta el 'post' que viene a ser el comando que realmente graba los datos, luego el 'commit' confirma que se graben, pero te falta el post.
En tu código debes escribir algo así como: Código:
with SQLQuery1 do |
Definitivamente no...:(
Gracias por vuestro tiempo Gustavo Cruz |
Tal vez el problema se encuentre en SQLTransaction
el tiene una Params, ¿Qué de se debe colocar?. yo ahí no tengo nada. Gracias de Antemano por vuestro tiempo GustavoCruz |
Amigo GustavoCruz, el problema es que no somos adivinos, debes contarnos lo más detallado posible la situación de lo que estás haciendo, porque así, con lo parco en palabras que estás siendo... es bastante difícil poder ayudarte, cuéntanos en detalle los componentes que usas, cómo están enlazados, qué procesos haces, pasos que das hasta llegar a esa función, mensajes de error o aviso que te salgan, resultados obtenidos, etc.
|
Cita:
|
Bueno amigos, ustedes disculpen mi torpeza...
tengo los siguientes componentes: IBConnection1 SQLTransaction1 SQLQuery1 conecto la base de datos al IBConnection1, luego hago el enlace IBConnection1 - SQLTransaction1; y los activo... luego al SQLQuery1 le asigno el IBConnection1 y el SQLTransaction1 lanzo una consulta para probar que todo está bien y me funciona... esto es lo que probé la primera vez:
eso me dio el siguiente error: 'EDatabaseError' Transaction already active luego probé con esto:
ya aquí no hay errores pero sigue sin insertar... luego probé hacer como ustedes me sugirieron y tampoco... PD. Dbf1 es el lugar donde estoy sacando los datos que necesito migrar... Muchas Gracias |
ok, amigo, ahora está más claro, vamos a ver si conseguimos solucionar ese problemita :)
La "cadena de conexión" de componentes debe ser: DataBase->Transaction->DataSet, supongo que el IBConnection es el que conecta a la base de datos, según has explicado: Cita:
Código:
SQLTransaction1.StartTransaction; |
Hola, veo con gran asombro los consejos dados al compañero, me van a disculpar si sueno odioso, pero quiero corregir algo: Cuando estas trabajando directamente con un componente que ejecuta consultas directamente como lo es un TSQLQuery, no necesitas de la llamada al procedimiento Post. Las razones técnicas ya son conocidas pos los que conozcan el funcionamiento interno del TDataset (que es donde se implementa este procedimiento).
Por otro lado, veo que segue habiendo un vacío de información aquí. No se sabe cuál es la configuración que estás utilizando para la transacción. La configuración la puedes encontrar en la propiedad Params del componente de transacción. Con respecto al error que tenías ("Transaction Already Active") el código que has utilizado no es lo recomentado. Prueba el siquiente:
Debes asegurarte que el componente SQLQuery1 esté enlazado a SQLTransaction1 y estos últimos tambien conectados al componente de conección a la base de datos. Saludos y quedo a la espera de que nos digas que estás colocando en la propiedad Params del SQLTransaction1 :) |
Analizando mejor el código, ahora creo que el problema no está en los parámetros de la transacción, sino en el propio código y componentes que estás utilizando.
Fijate en lo siguiente:
Veo confuso ese código. El nombre de componente SQLQuery1 por su nombre parece ser un decendiente de TSQLQuery, no se porque estás usando una propiedad "InsertSQL" (o estás confundiendo en el código un componente distinto que se llama "InsertSQL" o es una propiedad del componente "SQLQuery1") Si fuera la primero, asegurate que el componente InsertSQL esté conectado a cómo te dije con respecto a SQLQuery1 en el post anterior. Si es lo segundo, estas resolviendo un problema con otro problema. Deberías utilizar un componente más sencillo, un desenciente de TSQLQuery, el que solo tiene una propiedad llamada SQL que es donde insertas la instrucción SQL que deseas ejecutar. Espero hallas entendido lo que quise decir. Sino, no me molesta y con gran gusto te aclaro la idea. Saludos. // |
Es que ese es el problema, Chris, que no tenemos datos concretos de qué tipo de componentes son esos, y así es difícil aconsejar.
|
Hola amigo Chris, efectivamente se trata de TSQLQuery (de esos que vienen con lazarus).
Y estos componentes tienen la propiedades InsertSQL, DeleteSQL, UpdateSQL y SQL. yo, pues, utilizo InsertSQL. Pienso igualmente que el problema radica en los parámetros de la Transacción. Pues en fibplus el componente de transacción tiene unos parámetros e igual que los interbase, pero dichos parámetros cuando los copio al componente respectivo de Lazarus me muestra un error de esos... que son graves. haz la prueba y verás Gracias por vuestro tiempo Gustavo Cruz |
Problema solucionado.
Dejé de utilizar la propiedad InsertSQL, del componente SQLQuery, por SQL y me funcionó:D. no sé, pero si ponen esa propiedad es para que funcione....:D Gracias a todos por vuestro tiempo Gustavo Cruz |
La franja horaria es GMT +2. Ahora son las 21:59:19. |
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