Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-04-2008
Nereida Nereida is offline
Miembro
 
Registrado: abr 2008
Posts: 34
Poder: 0
Nereida Va por buen camino
Unhappy problemas con inserciones, modificaciones y eliminaciones en Interbase con Delphi

hola!:
soy un poco novata con delphi pero aún asi tengo q hacer un proyecto que consiste en dar altas, bajas y eliminaciones utilizando como servidor Interbase y uniendolo a Delphi mediante los controles convenientes. Voy a intentar explicarme lo mejor posible para asi que sea más fácil entenderlo.
En mi formulario tengo lo siguiente:
- la conexion con su ibtransaction
- un dbgrid1 ( q muestra algunos campos de una tabla)
- unos dbedit
-dos datasuouce (datasource1 y datasource2)
- un ibtable1 y un ibquery1
- botones de Nuevo, modificar, eliminar

Tengo relacionado el el datasource1, con el ibtable1 y con el dbgrid1.
Por otra parte, tmb tengo relacionado el ibquery1 con el datasource2 que lo que hace es mostrarme toda la información del control que selecciono en el dbgrid ya que en el dbgrid solo me muestra el campo dni y el nombre.

Cuando hago una inserción, llamo a un formulario externo (por manias mias), que tengo tmb dbedit relacionados al ibtable anterior.
Mi problema es que he probado varios modos de insertar pero no me actualiza el ibtable por más que le ponga refresh o lo que sea .
He probado a crear un Dataset y ponerle unit1.mdichild1.ibdataset1.insertsql.add ( sentencia sql)
pero me lo inserta pero no me actualiza nada

Sé que esto puede ser largo de explicar pero sé como hacer cosas con bases de datos, aunque no en delphi pero por más cosas que he probado no puedo hacer nada ya que no consigo que me actualice los datos .
Saludos y gracias
Responder Con Cita
  #2  
Antiguo 17-04-2008
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
Has creado las correspondientes sentencias de Inserción, Modificación, Borrado y Actualización para los TIBTable y TIBQuery que tienes ?

Para ello deberas hacer Click derecho encima del componente y elegir 'Dataset Editor', o también lo puedes hacer a través de las propiedades correspondientes (InsertSQL, ModifySQL, DeleteSQL, RefreshSQL).
__________________
Piensa siempre en positivo !
Responder Con Cita
  #3  
Antiguo 17-04-2008
iuqrul iuqrul is offline
Miembro
 
Registrado: dic 2004
Ubicación: Cartagena
Posts: 36
Poder: 0
iuqrul Va por buen camino
No utilices un TIBQuery para hacer el alta y un TIBTable para ver la tabla.

Recuerda, si ejecutas un insert sobre la base de datos a través de un TIBQuery, tu TIBTable no se entera, hasta que no se cierra y se vuelve a abrir, porque es una base de datos cliente-servidor.

Si defines un TIBUpdateSQL y lo vinculas al TIBTable, y luego ejecutas el alta con el método Insert del TIBTable.

Recomendación personal: acostumbrate a usar el TIQuery, y combinado con el TIBUpdateSQL, podrás hacerlo todo, tablas simples, consultas complejas, procedimientos que devuelven resultados...

Última edición por iuqrul fecha: 17-04-2008 a las 13:03:28.
Responder Con Cita
  #4  
Antiguo 17-04-2008
Nereida Nereida is offline
Miembro
 
Registrado: abr 2008
Posts: 34
Poder: 0
Nereida Va por buen camino
Cita:
Empezado por iuqrul Ver Mensaje
No utilices un TIBQuery para hacer el alta y un TIBTable para ver la tabla.

Recuerda, si ejecutas un insert sobre la base de datos a través de un TIBQuery, tu TIBTable no se entera, hasta que no se cierra y se vuelve a abrir, porque es una base de datos cliente-servidor.

Si defines un TIBUpdateSQL y lo vinculas al TIBTable, y luego ejecutas el alta con el método Insert del TIBTable.

Recomendación personal: acostumbrate a usar el TIQuery, y combinado con el TIBUpdateSQL, podrás hacerlo todo, tablas simples, consultas complejas, procedimientos que devuelven resultados...
Te hice caso y puse el IBUpdateSQL y utilié el metodo post para guardar el valor de la tabla (primero hice un insert y una vez introducidos los datos puse un ibtable.post pero me dice "Empty SQL Statement"). Creo que deberia de haber puesto algo más en el TIBUpdate SQL. Me explico: las lineas de codigo q tengo ahora son:

ibtable1.insert
//comprobaciones de los datos q se han introducido
ibtable1.post

también prove de poner esto:
IBUpdateSQL1.InsertSQL.Add('INSERT INTO Cliente(dni_clie) VALUES ( ''' + dbedit1.Field.AsString + '' + ')');

pero me da error.

Siento si me equivoco en tonterias pero es que hasta ahora solo habia programado en Visual Basic y en C++ y este lenguaje lo estoy utilizando desde hace 2 semanas.
Saludos y gracias por la ayuda.

Última edición por Nereida fecha: 17-04-2008 a las 14:46:58.
Responder Con Cita
  #5  
Antiguo 17-04-2008
Avatar de BlueSteel
[BlueSteel] BlueSteel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Concepción - Chile
Posts: 2.310
Poder: 23
BlueSteel Va por buen camino
Smile

Hola Nereida

Creo que te seria util leer la cara oculta de delphi 4... te puede aclarar varias cosas...Tambien te recomendaria que te dieras una buelta por la Wiki.. tambien existen varios ejemplos

Bueno... pasando a tu tema...

Yo trabajo con Interbase 6, Delphi 7 y componente IBX

Cuando desarrollo un proyecto, creo un Formulario de Tipo DataModule... lo nombro como Datos y en él dejo todos los componentes IBX para conexión al Interbase... estos son:

-( 1 ) TIBDatabase -> conexión a la base... direcion..ruta..archivo

-( n ) TIBQuery -> conexión a tablas y/o procesos de actualización de registros
-( n ) TIBTransaction (hacer doble click y dejar en Read Committed para reflejar actualizaciones)

Para insertar un registro, utilizo un codigo similar al que sigue

Código Delphi [-]
 
// Datos es un Formulario de tipo DataModule donde estan todo lo que mencione antes
 
Datos.IBQ_Edit.SQL.Clear;
// Aqui comienzo a realizar instrucción para insertar registros
Datos.IBQ_Edit.SQL.Add('Insert Into "Cliente" ("Cli_Rut","Cli_Razon","Cli_Giro","Cli_Email","Cli_Direccion","Cli_Poblacion","Cli_Comuna","Cli_Fono  ","Cli_Fax")');
Datos.IBQ_Edit.SQL.Add('Values (:P1, :P2, :P3, :P4, :P5, :P6, :P7, :P8, :P9)');
Datos.IBQ_Edit.Params[0].AsString := vRut.Text;
Datos.IBQ_Edit.Params[1].AsString := vRaz.Text;
Datos.IBQ_Edit.Params[2].AsString := vGir.Text;
Datos.IBQ_Edit.Params[3].AsString := vMai.Text;
Datos.IBQ_Edit.Params[4].AsString := vDir.Text;
Datos.IBQ_Edit.Params[5].AsString := vPob.Text;
Datos.IBQ_Edit.Params[6].AsString := vCom.Text;
Datos.IBQ_Edit.Params[7].AsString := vTel.Text;
Datos.IBQ_Edit.Params[8].AsString := vFax.Text;
Datos.IBQ_Edit.ExecSQL;  // Ejecuto sentencia SQL
Datos.IBT_Edit.Commit; // Aplico cambios en la transacción asociada

Selecciona_Cliente; // procedimiento que me realiza un select de todos los registro para que se muestre el insertado

Código Delphi [-]
// Este es el proceso que se llama en el codigo de arriba
procedure Selecciona_Cliente;
begin
     Datos.IBQ_Select.Close;
     Datos.IBQ_Select.SQL.Clear;
     Datos.IBQ_Select.SQL.Add('Select * From "Cliente" Order By "Cli_Rut"');
     Datos.IBQ_Select.Open;
end;

Bueno... espero que este código te sea de ayuda.. cualquier cosa..sigue preguntando..

Salu2
__________________
BlueSteel
Responder Con Cita
  #6  
Antiguo 18-04-2008
iuqrul iuqrul is offline
Miembro
 
Registrado: dic 2004
Ubicación: Cartagena
Posts: 36
Poder: 0
iuqrul Va por buen camino
Cita:
Empezado por Nereida Ver Mensaje
... "Empty SQL Statement"). Creo que deberia de haber puesto algo más en el TIBUpdate SQL...
Debes cumplimentar el TIBQuery.SQL.Text con la consulta sobre la que vas a modificar, y en el TIBUpdateSQL.RefreshSQL pones lo mismo pero añadiendo "where ID=:ID" sustituyendo ID por el campo de la clave primaria.
Responder Con Cita
  #7  
Antiguo 18-04-2008
Nereida Nereida is offline
Miembro
 
Registrado: abr 2008
Posts: 34
Poder: 0
Nereida Va por buen camino
Cita:
Empezado por iuqrul Ver Mensaje
Debes cumplimentar el TIBQuery.SQL.Text con la consulta sobre la que vas a modificar, y en el TIBUpdateSQL.RefreshSQL pones lo mismo pero añadiendo "where ID=:ID" sustituyendo ID por el campo de la clave primaria.
He puesto esto:

IBUpdateSQL1.SQL.Text:='UPDATE Cliente SET nom_clie = ''' + dbedit2.field.AsString + '';

pero me decia q esperaba un [ en vez de un punto pq me parece q tenia q ponerle algo en la propiedad de SQL pq cuando la ponia me decia q pusiera el tipo, por lo q prové a poner modifySQL pero no lo reconocia

después puse:

unit1.MDIChild1.IBUpdateSQL1.modifySQL.Add('UPDATE Cliente SET nom_clie = ''' + dbedit2.field.AsString + '');
unit1.MDIChild1.IBUpdateSQL1.RefreshSQL.Add ('UPDATE Cliente SET nom_clie = ''' + dbedit2.field.AsString + ''' + WHERE dni_clie= ' + dbedit1.Field.AsString);

pero me da error con las claves primarias.
Siento ser tan pesada pero es que me cuesta mucho.

Saludos y gracias a todos
Responder Con Cita
  #8  
Antiguo 25-04-2008
Nereida Nereida is offline
Miembro
 
Registrado: abr 2008
Posts: 34
Poder: 0
Nereida Va por buen camino
Cita:
Empezado por iuqrul Ver Mensaje
Debes cumplimentar el TIBQuery.SQL.Text con la consulta sobre la que vas a modificar, y en el TIBUpdateSQL.RefreshSQL pones lo mismo pero añadiendo "where ID=:ID" sustituyendo ID por el campo de la clave primaria.
Con un poco de suerte y con ayuda de un compañero, pude hacer lo que me dijiste y funciona genial.
Muchas gracias

Saludos
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
Problemas con inserciones masivas gusanita Conexión con bases de datos 2 16-12-2005 06:40:37
Modificaciones DBGrid Delphi 7 damix Varios 4 15-11-2005 19:43:32
Eliminaciones en cascada. zugazua2001 SQL 4 04-07-2005 18:36:10
Problemas de inserciones con ADO Mauro.NET Conexión con bases de datos 2 27-04-2005 05:18:36
Problemas en inserciones tica Conexión con bases de datos 2 09-12-2003 17:41:24


La franja horaria es GMT +2. Ahora son las 18:06:21.


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