Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Uso TIBDataset (https://www.clubdelphi.com/foros/showthread.php?t=51770)

mjjj 28-12-2007 17:53:34

Uso TIBDataset
 
Hola amigos... una consulta con respecto al uso del Dataset...

Tengo un TIBDataset, conectado a una base de datos Firebird 2.01

Necesito insertar, editar y eliminar ciertos registros de cierta tabla.

Para buscar que registro voy a editar o eliminar utilizo este codigo:

Código Delphi [-]
//desde aqui comienzo a vuscar el registro que quiero editar
ibdataset1.close;
ibdataset1.selectsql.clear;
ibdataset1.selectsql.add('select * from claves');
ibdataset1.selectsql.add('where usuario ='+quotedstr(edit1.text));
ibdataset1.open;
//aqui termino de buscar el registro que voy a editar
 
//comienzo a editar el registro
ibdataset1.edit;
ibdataset1.fieldbyname('clave').asstring:=edit2.text;
ibdataset1.post;
//termino con una transaccion para que se lleve a cabo el cambio
ibtransaction1.commit;

¿ESTA BIEN HECHO ESTO? ... SINO, DE QUE OTRA MANERA LO PUEDO HACER?

gracias por su ayuda.... no he podido encontrar informacion sobre este componente.... me ha costado utilizarlo

juanelo 28-12-2007 18:17:39

Que tal,
Primero que nada por default un TIBQuery es solo de "lectura", es decir, no puedes editarlo y modificar sus datos esperando que se modifiquen en la tabla.
Para eso existirian 2 alternativas:

1.-Toma el valor que quieres grabar y lo moadificas o lo insertas con una sentencia SQL.

2.-Utiliza un ClientDataSet y su DataSetProvider para poder hacer las operaciones que necesites, y posteriormente haces un ApplyUpdates.

Saludos

mjjj 28-12-2007 18:24:29

hola juanelo.... no estoy utilizando un TIBQuery, sino un TIBDataset

El TIBDataset es el que estoy tratando de entender como es que funciona...

¿Estará bien el codigo que utilizo segun mi anterior mensaje?

Saludos

juanelo 28-12-2007 18:34:18

Ok, si no me di cuenta que es unn TIBDataSet, efectivamente puedes consultar los datos por medio de una sentencia y hacer operaciones con ellos y enviarlas con Post. Es Correcto.
Saludos

Lepe 28-12-2007 18:52:28

mjj, no te compliques tanto la vida. Si bien es cierto que lo has hecho bien, puedes hacerlo en tiempo de diseño (con asistentes que te propondrán todas las sqls de forma estandard) evitando tener que escribir código.

En principio, rellena la propiedad select del TIbdataset en el inspector de objetos. Después, boton derecho sobre el TIbDataset y "Dataset Editor" o algo así (yo uso los MDOLIB y en IBX no sé como se llamará la opción del menú). Como dije, eso te propone unas sqls estandard, que después de aceptar las pantallitas, puedes modificar para ajustarla a tus necesidades.

La sql de Select yo pondría:
Código SQL [-]
select * from claves where usuario = :Nombre;
Y en el evento BeforeOpen del TIBdataset:
Código Delphi [-]
 ibdataset1.parambyname('Nombre') := edit1.text; // no hace falta el quotedstr;

Tu código quedaría resumido así:
Código Delphi [-]
//desde aqui comienzo a vuscar el registro que quiero editar
ibdataset1.close;
// ahora se ejecuta el evento before open y se asigna el usuario buscado
ibdataset1.open;
//aqui termino de buscar el registro que voy a editar

if not ibdataset.Empty then
begin
  //comienzo a editar el registro
  ibdataset1.edit;
  ibdataset1.fieldbyname('clave').asstring:=edit2.text;
  ibdataset1.post;
  //termino con una transaccion para que se lleve a cabo el cambio
end;
ibtransaction1.commit;

PD: IBX no será compatible con Firebird, te sugiero otros componentes de acceso, como los MDOLIB (su desarrollo está parado pero son funcionales), Zeos, ADO, etc.

Saludos

mjjj 28-12-2007 20:17:47

Hola lepe.. segui tu sugerencia y me arroja un error:

cannot modify a read-only Dataset... he buscado pero no he podido solucionarlo... el ibdataset no tiene la propiedad readonly...

bueno no se que puede ser... ayuda porfa


La franja horaria es GMT +2. Ahora son las 03:32:23.

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