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)
-   -   Problemas con TQuery (https://www.clubdelphi.com/foros/showthread.php?t=47511)

mightydragonlor 30-08-2007 04:33:19

Problemas con TQuery
 
Hola, el asunto es el siguiente, cuando intento insertar una registro con un TQuery me sale un error "No se puede ejecutar una accion con un Dataset cerrado", cosa que no pasa con un TTable.
El primer campo está en Nil por que es AutoIncrementable.
Código Delphi [-]
TblContacto.AppendRecord([NIL,NICK.Text,NOMBRES.Text,APELLIDOS.Text,TEL_PER.Text
  ,TEL_LAB.Text,TEL_MOV.Text,DIRECCION.Text,CIUDAD.Text
  ,MAIL_PER.Text,MAIL_LAB.Text,MAIL_ADD.Text
  ,FECHA_NAC.Date,ToBMP(ImgFoto.Picture.Graphic),NOTAS.Lines]);

Si alguien sabe como hacerlo funcionar, lo agradeceré por siempre.

eduarcol 30-08-2007 04:40:09

Tienes que abrirlo con open; o Active := True;

mightydragonlor 30-08-2007 16:26:49

El Componente ya está abierto, solo que lo hago en el Form.Create.

Paoti 30-08-2007 16:31:02

porque no pruebas esto:


Código Delphi [-]
tquery.insert;
tquery.fieldbyname('campo1').asString := cata.text;
tquery.fieldbyname('campoFecha').asDate := StrtoDate(caja2.text);
....
Tquery.post;


Saludos

mightydragonlor 30-08-2007 17:07:42

Ya lo intenté y no funciona, como primera medida tengo un campo de tipo Gráfico.
Código Delphi [-]
tquery.insert;
tquery.fieldbyname('campo1').asString := cata.text;
tquery.fieldbyname('campoFecha').asDate := StrtoDate(caja2.text);
....
Tquery.post;
pero no hay ninguna propiedad como AsGraphic.

eduarcol 30-08-2007 17:11:33

y porq no colocas el codigo completo de done guardas a ver que haces??

mightydragonlor 30-08-2007 17:20:14

está tal cual, solo que en el create está el Open y despues el Post

Código Delphi [-]
TblContacto.Open
TblContacto.AppendRecord([NIL,NICK.Text,NOMBRES.Text,APELLIDOS.Text,TEL_PER.Text
,TEL_LAB.Text,TEL_MOV.Text,DIRECCION.Text,CIUDAD.Text
,MAIL_PER.Text,MAIL_LAB.Text,MAIL_ADD.Text
,FECHA_NAC.Date,ToBMP(ImgFoto.Picture.Graphic),NOTAS.Lines]);
TblContacto.Post;

eduarcol 30-08-2007 17:47:12

sigo sin entender porq dices que el open esta en el create y lo colocas alli, porq no pruebas esto:

Código Delphi [-]
TblContacto.Active := True;
TblContacto.AppendRecord([NIL,NICK.Text,NOMBRES.Text,APELLIDOS.Text,TEL_PER.Text
,TEL_LAB.Text,TEL_MOV.Text,DIRECCION.Text,CIUDAD.Text
,MAIL_PER.Text,MAIL_LAB.Text,MAIL_ADD.Text
,FECHA_NAC.Date,ToBMP(ImgFoto.Picture.Graphic),NOTAS.Lines]);
TblContacto.Post;

Chris 30-08-2007 17:50:59

No se mucho sobre SQL y queries, pero tu problema no será más bien, por lo que estás utilizando un query y esté a su vez es solo para consultar datos y no para agregar. De todos modos recuerda que SQL ya trae sus comandos para agregar nuevos registros. Por que no utilizar otro TQuery exclusivamente para agregar u modificar registros.

eduarcol 30-08-2007 18:00:50

lo que dices es cierto, pero el error viene porq el dataset no ha sido abierto apropiadamente, lo que tu piensas es cuando el error que da menciona que no se puede abrir un dataset de solo lectura

mightydragonlor 30-08-2007 21:32:01

Tienes Razón, lo que pasa xon el Query es que la instrucción SQL es de Select, esto hace que el Query sea de solo lectura y al intentar insertar un registro salga el error de solo lectura y si borro el SQL para ejecutar la accion, aparece como DataSet Cerrado, agradeceria mucho si alguien sabe como insertar y modificar registros atravez de un TQuery.
La Idea con esto es la siguiente:
Tengo Un DataModule y en este un TDataSource y un TQuery.
Tengo Un Form y en este un DBGrid y los controles para insertar un registro
(No son los DBControls, son los Standard), lo que quiero que que al insertar o modificar un registro se actualice automaticamente el DBGrid, si lo Hago con un TTable no ocurre ningún problema, pero con este no puedo hacer agrupamientos ni busquedas Like, ni ordenamientos especiales, por esta razón necesito un TQuery. Bueno si alguien sabe como lograrlo agradeceré enormemente su ayuda.
De antemano gracias por prestar atención a este caso y por las sugerencias.

eduarcol 30-08-2007 21:42:32

Código Delphi [-]
MiQuery.Insert;
   MiQueryCampo1.AsString := 'Algo';
   .
   .
   .
   MiQueryCampon.AsString := 'Algo'; 
MiQuery.Post;

Para que esto funcione debes colocar la propiedad RequestLive a True

Caral 30-08-2007 21:47:42

Hola
esta es la idea:
Código Delphi [-]
TuQuery.SQL.Text := 'Insert Into TblContacto (aoutoc, nick, nombre, apellido, telefonop, telefonoh, telefonom, direccion, ciudad) '+
               'Values ('  ', '+QuotedStr(NICK.Text)+', '+QuotedStr(NOMBRES.Text)+', '+
              QuotedStr(APELLIDOS.Text)+', '+TEL_PER.Text+', '+TEL_LAB.Text+', '+TEL_MOV.Text+', '+DIRECCION.Text+', '+CIUDAD.Text+')'
 QTemp.ExecSQL;
No esta completa la sentencia, pero ya con esto veras como se hace.
Saludos

mightydragonlor 30-08-2007 21:47:52

Gracias Caral, le verdad no sabia como hacer el Insert Into teninedo un campo autoincremetable, gracias a todos por su colaboración.


La franja horaria es GMT +2. Ahora son las 05:44:51.

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