Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > Lazarus, FreePascal, Kylix, etc.
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-02-2010
Avatar de GustavoCruz
GustavoCruz GustavoCruz is offline
Miembro
 
Registrado: jul 2006
Ubicación: Sampués Sucre (Colombia)
Posts: 293
Poder: 18
GustavoCruz Va por buen camino
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
Responder Con Cita
  #2  
Antiguo 12-02-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿Y por qué no has podido?
Responder Con Cita
  #3  
Antiguo 12-02-2010
Avatar de GustavoCruz
GustavoCruz GustavoCruz is offline
Miembro
 
Registrado: jul 2006
Ubicación: Sampués Sucre (Colombia)
Posts: 293
Poder: 18
GustavoCruz Va por buen camino
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
Código SQL [-]
SQLTransaction.CommintRetaing
y eso debería ser suficiente pero no...

De antemano mil gracias por vuestro tiempo y aportes
Responder Con Cita
  #4  
Antiguo 12-02-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿No habrás olvidado hacer 'post' después del insert?
Responder Con Cita
  #5  
Antiguo 12-02-2010
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Haz caso a Casimiro:

Código Delphi [-]
procedure TfrProveedores.BitBtn1Click(Sender: TObject);
begin
 if DmProv.IBDTsProv.State in [dsInsert, dsEdit] then
 DmProv.IBDTsProv.Post;

Código Delphi [-]
procedure TDmProv.IBDTsProvAfterPost(DataSet: TDataSet);
begin
DmConex.IBTransaction.CommitRetaining;
end;

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #6  
Antiguo 13-02-2010
Avatar de GustavoCruz
GustavoCruz GustavoCruz is offline
Miembro
 
Registrado: jul 2006
Ubicación: Sampués Sucre (Colombia)
Posts: 293
Poder: 18
GustavoCruz Va por buen camino
hola amigos, yo en lazarus escribo asì:
Código Delphi [-]
with SQLQuery1 do
begin
  insertSQL.Clear;
  insertSQL.Add('insert into tabla(campos) values(valores)');
  ...
end;

y eso debería ser suficiente para insertar los registros...

pero no funciona
Responder Con Cita
  #7  
Antiguo 13-02-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿No has leído el código que te ha puesto marcoszorrilla? , 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
begin
  insertSQL.Clear;
  insertSQL.Add('insert into tabla(campos) values(valores)');

  SQLQuery1.Post;   <<-------------<

end;
Responder Con Cita
  #8  
Antiguo 13-02-2010
Avatar de GustavoCruz
GustavoCruz GustavoCruz is offline
Miembro
 
Registrado: jul 2006
Ubicación: Sampués Sucre (Colombia)
Posts: 293
Poder: 18
GustavoCruz Va por buen camino
Definitivamente no...

Código Delphi [-]
with SQLQuery1 do
        begin
          InsertSQL.Clear;
          InsertSQL.Add('insert into detable values('+Dbf1.Fields[0].AsString
          +','''+Dbf1.Fields[1].AsString+''')');
          ExecSQL;
          Post;
        end;

Gracias por vuestro tiempo


Gustavo Cruz
Responder Con Cita
  #9  
Antiguo 13-02-2010
Avatar de GustavoCruz
GustavoCruz GustavoCruz is offline
Miembro
 
Registrado: jul 2006
Ubicación: Sampués Sucre (Colombia)
Posts: 293
Poder: 18
GustavoCruz Va por buen camino
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
Responder Con Cita
  #10  
Antiguo 13-02-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
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.
Responder Con Cita
  #11  
Antiguo 13-02-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por GustavoCruz Ver Mensaje
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
Lo debes tener enlazado con la base de datos.
Responder Con Cita
  #12  
Antiguo 13-02-2010
Avatar de GustavoCruz
GustavoCruz GustavoCruz is offline
Miembro
 
Registrado: jul 2006
Ubicación: Sampués Sucre (Colombia)
Posts: 293
Poder: 18
GustavoCruz Va por buen camino
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:

Código Delphi [-]
  SQLTransaction1.StartTransaction;
  while not Dbf1.EOF do
    begin
      with SQLQuery1 do
        begin
          InsertSQL.Clear;
          InsertSQL.Add('insert into detable values('+Dbf1.Fields[0].AsString
          +','''+Dbf1.Fields[1].AsString+''')');
          ExecSQL;
        end;
      Dbf1.Next;
    end;
  SQLTransaction1.CommitRetaining;

eso me dio el siguiente error: 'EDatabaseError' Transaction already active

luego probé con esto:
Código Delphi [-]
  SQLTransaction1.EndTransaction;
  SQLTransaction1.StartTransaction;
  while not Dbf1.EOF do
    begin
      with SQLQuery1 do
        begin
          InsertSQL.Clear;
          InsertSQL.Add('insert into detable values('+Dbf1.Fields[0].AsString
          +','''+Dbf1.Fields[1].AsString+''')');
          ExecSQL;
        end;
      Dbf1.Next;
    end;
  SQLTransaction1.CommitRetaining;

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
Responder Con Cita
  #13  
Antiguo 13-02-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
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:
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
Creo que el asunto va a estar ahí, el SQLQuery es un DataSet que haces bien en conectarlo a la base de datos (IBConnection), pero creo que está sobrando ahí el enlace con SQLTransaction. Tengo que confirmarlo porque no sé exactamente qué componentes son esos, pero prueba a quitar eso y además añade el .post que te aconsejamos antes.
Código:
SQLTransaction1.StartTransaction;
  while not Dbf1.EOF do
  begin
    with SQLQuery1 do
    begin
      InsertSQL.Clear;
      InsertSQL.Add('insert into detable values('+Dbf1.Fields[0].AsString +','''+Dbf1.Fields[1].AsString+''')');
      ExecSQL;
      Post;  <---------------
     end;
    Dbf1.Next;
 end;
 SQLTransaction1.CommitRetaining;
Si no te funciona, entonces infórmame qué componentes son esos para yo hacer una prueba.
Responder Con Cita
  #14  
Antiguo 13-02-2010
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
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:

Código Delphi [-]

  if not SQLTransaction1.InTransaction then // iniciar la transacción si aún no se ha iniciado
     SQLTransaction1.StartTransaction;

  while not Dbf1.EOF do
  begin
      with SQLQuery1 do
        begin
          InsertSQL.Clear;
          InsertSQL.Add('insert into detable values('+Dbf1.Fields[0].AsString
          +','''+Dbf1.Fields[1].AsString+''')');
          ExecSQL;
        end;
      Dbf1.Next;
  end;

  SQLTransaction1.CommitRetaining;

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
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #15  
Antiguo 13-02-2010
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
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:

Código Delphi [-]
  if not SQLTransaction1.InTransaction then // iniciar la transacción si aún no se ha iniciado
     SQLTransaction1.StartTransaction;

  while not Dbf1.EOF do
  begin
      with SQLQuery1 do
        begin
          InsertSQL.Clear;
          InsertSQL.Add('insert into detable values('+Dbf1.Fields[0].AsString
          +','''+Dbf1.Fields[1].AsString+''')');
          ExecSQL;
        end;
      Dbf1.Next;
  end;

  SQLTransaction1.CommitRetaining;

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. //
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #16  
Antiguo 13-02-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
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.
Responder Con Cita
  #17  
Antiguo 13-02-2010
Avatar de GustavoCruz
GustavoCruz GustavoCruz is offline
Miembro
 
Registrado: jul 2006
Ubicación: Sampués Sucre (Colombia)
Posts: 293
Poder: 18
GustavoCruz Va por buen camino
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
Responder Con Cita
  #18  
Antiguo 13-02-2010
Avatar de GustavoCruz
GustavoCruz GustavoCruz is offline
Miembro
 
Registrado: jul 2006
Ubicación: Sampués Sucre (Colombia)
Posts: 293
Poder: 18
GustavoCruz Va por buen camino
Thumbs up

Problema solucionado.
Dejé de utilizar la propiedad InsertSQL, del componente SQLQuery, por SQL
y me funcionó. no sé, pero si ponen esa propiedad es para que funcione....


Gracias a todos por vuestro tiempo

Gustavo Cruz
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
TStringGrid Insertar registros grotero76 OOP 8 12-03-2013 17:02:38
insertar registros hxochitemol Conexión con bases de datos 1 02-06-2007 01:21:56
Como insertar registros con sql? newbery Firebird e Interbase 1 10-01-2006 14:32:30
Error al insertar o borrar registros en firebird pepitu Firebird e Interbase 3 26-09-2005 14:56:57
Problemas al insertar registros con ADO sanluisme Conexión con bases de datos 0 04-03-2004 10:34:41


La franja horaria es GMT +2. Ahora son las 10:27:16.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi