Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   insertar y consultar una tabla desde datamodule (https://www.clubdelphi.com/foros/showthread.php?t=75940)

anubis 29-09-2011 02:16:11

insertar y consultar una tabla desde datamodule
 
hola de nuevo.

Hay cosas que no entiendo todavia o me cuesta entender:

En primera, si tengo un datamodule y ahi asigno la base de datos, asigno las tablas a los querys y luego los activo porque no puedo hacer lo mismo desde otra unit si de otra unit si puedo consultar esas tablas, por que no me permite hacer:

module.datamodule1.zquery1.active:=true;

me dice que no encuentra la base de datos.

Pero si hago una consulta si me deja?

La otra cuestion es:

si inserto registros todo va bien pero, si posteriormente modifico alguno de ellos, no puedo volver a consultar porque me da error.

Ya probé, como digo a volver a activar el query pero no funciona.

Se que son cosas elementales pero es me atraganta.

El programa que estoy haciendo si inserta registros y los cambia pero las consultas nuevas no.

Una manita plis porque no entiendo por mas vueltas que doy.

gracias

Caral 29-09-2011 02:37:52

Hola
No entiendo esto:
Código Delphi [-]
module.datamodule1.zquery1.active:=true;

Se supone que el datamodule es como un form mas, solamente que no es visible.
No se deberia llamar simplemente asi ?:
Código Delphi [-]
datamodule1.zquery1.active:=true;

No entiendo que es module.
Saludos

Casimiro Notevi 29-09-2011 02:40:19

Cita:

Empezado por anubis (Mensaje 413861)
no puedo volver a consultar porque me da error.

¿Y el error saca algún mensaje?

anubis 29-09-2011 03:06:08

tienes toda la razon caral con

Código Delphi [-]
datamodule1.query1.active
es mas que suficiente para que haga el enlace.

Voy por partes entonces.

en el datamodule asigno la base de datos y conecto los query y los activo, hasta ahi me funciona todo bien.

Hago consultas de unas tablas e inserto en otras, tambien todo bien.

El gran problema surge cuando en una tabla hago:

Código Delphi [-]
datamodule1.zquery1.sql.Clear;
datamodule1.ZQuery1.SQL.Text:='update tcuentas set  cuenta=:cuenta, nombrecuenta=:nombrecuenta, numcheque=:numcheque where clave=:clave';
datamodule1.zquery1.parambyname('clave').asinteger:=clavecuenta;
datamodule1.zquery1.ParamByName('cuenta').asstring:=ncuenta.Caption;
datamodule1.zquery1.parambyname('nombrecuenta').asstring:=label4.Caption;
datamodule1.zquery1.parambyname('numcheque').asinteger:=numcheque;
datamodule1.zquery1.ExecSQL;

me hace perfecta la modificacion, pero quiero volver a consultar esa tabla.
Como es logico me dice que no se puede porque estas consultando eun dataset inactivo, asi que lo intento activar con:

Código Delphi [-]
datamodule1.query1.active:=true;

ahi me dice que no encuentra la tabla, asi que se la asigno de nuevo con

Código Delphi [-]
datamodule1.zquery1.sql.text:='select * from tcuenta';

y ahi ya me dice que no la base de datos no esta.

Digo yo, hasta donde yo creia, con los insert no hay que hacer practicamente nada, pero con los update hay que reactivar la tabla no?.

gracias por contestar

editado: por cierto, el datamodule se autocrea antes de crear el form.

alej.villa 29-09-2011 03:48:23

Cita:

Empezado por anubis (Mensaje 413866)
El gran problema surge cuando en una tabla hago:
Código Delphi [-]datamodule1.zquery1.sql.Clear; datamodule1.ZQuery1.SQL.Text:='update tcuentas set cuenta=:cuenta, nombrecuenta=:nombrecuenta, numcheque=:numcheque where clave=:clave'; datamodule1.zquery1.parambyname('clave').asinteger:=clavecuenta; datamodule1.zquery1.ParamByName('cuenta').asstring:=ncuenta.Caption; datamodule1.zquery1.parambyname('nombrecuenta').asstring:=label4.Caption; datamodule1.zquery1.parambyname('numcheque').asinteger:=numcheque; datamodule1.zquery1.ExecSQL;

[FONT=verdana,geneva,lucida,'lucida grande',arial,helvetica,sans-serif]
porque en vez de hacerlo por sql la modificacion no la haces de este modo

[/font]
Código Delphi [-]
datamodule1.tu_tabla.edit
datamodule1.tu_tabla.fieldbyname('campos').asstring:=clavecuenta;
datamodule1.tu_tabla.post

de esa forma no utilizarias el query y puedes hacer tu consulta sin problemas

PD: cuando me refiero a tu tabla no es al zquery1
sino a la tabla que tienes conectada directamente con la base de datos

anubis 29-09-2011 03:54:31

Gracias por la respuesta.

Puedo probar con la tabla pero sigue sin servir un query?

El problema es reactivar luego el query o la tabla que no me deja puesto que esta enlazado con el datamodule.

alej.villa 29-09-2011 04:01:59

porque no pruebas haciendo esto

Código Delphi [-]
dm.query.close;
dm.query.sql.clear;
dm.query.sql.add('SELECT * FROM tu tabla');
dm.query.open;

anubis 29-09-2011 04:05:42

si, tambien lo he probado, al poner open me sigue diciendo que el dataset no esta activo.

alej.villa 29-09-2011 04:10:31

tienes algún código en la parte de propiedades del sql del query?

si es asi creo que lo mejor es dejarlo en blanco y cada vez que necesites consultar algo le indiques lo que deseas consultar

anubis 29-09-2011 04:29:36

gracias de nuevo

con el table1 como dices si funciona lo unico que no actualiza el dato hasta que cierro el programa yl o vuelvo a abrir, ya probe a desactivar la tabla, cerrarla abrirla, refrescarla, etc... el query no lo refresca porque no lo permite.

El principal problema qu etenia con el query es que desde el datamodule si me deja activar los query pero desde el programa principal no, y esto es un problemita.

edito:

con el zquery.refresh si actualiza pero creo que no es forma o si de hacer las cosas?.

Ya me lie.:)

lo que quiero saber es porque el zquery no me funciona con el active.

Caral 29-09-2011 18:19:20

Hola
Creas el datamodule en tiempo de ejecución cuando creas el form.
Lo destruyes en algún momento?, en que evento se crea ?.
El query esta en el datamodule por ende este se crea de igual forma, no es asi?.
Saludos

anubis 29-09-2011 20:36:57

Si, el datamodule lo creo en tiempo de ejecucion cuando se abre la aplicacion, pero antes de crear el form.
No lo destruyo y si, el query esta en el datamodule asi que se crea a la vez.

Esta en el evento oncreate del datamodule.

Si algo estoy haciendo mal ahi cuentame porque por mas vueltas qu ele doy no doy con ello.

ah, la unidad del datamodule esta en el uses del interface de la unidad principal, no en la implementacion (que tambien lo puse ahi).

Me darias un soplo de aire si me haces ver la solucion.

gracias mil

Caral 29-09-2011 20:41:59

Hola
Pregunto solo por curiosidad:
Por que crear el datamodule y lo demas en ejecucion y no en diseño?.
Saludos

anubis 29-09-2011 23:07:02

Perdon, no se crean en ejecución sino en diseño, automaticamente.

No se si es a lo que te refieres.

De todas formas, sigo sin entender por que no se puede acceder al query desde otra unit.

saludos


La franja horaria es GMT +2. Ahora son las 10:08:54.

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