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 02-06-2007
NeWsP NeWsP is offline
Miembro
 
Registrado: oct 2003
Ubicación: Barcelona
Posts: 57
Poder: 21
NeWsP Va por buen camino
Pasar el resultado de un Zquery a una variable

Buenos dias,

Estoy intentando hacer un programa que me crea un registro en una tabla ya creada, entonces automaticamente al insertar el registro, la BD le da un valor para el campo ID .
El problema que tengo es como recuperar ese campo ID y meter el valor en una variable.

Asi inserto el campo en la BD:

Código Delphi [-]
Zquery1.SQL.Clear;
ZQuery1.SQL.Add('insert into '+Edit5.Text +'.'+Edit6.text+ '_sections');
Zquery1.SQL.add('(title,name,scope,image_position,published)');
Zquery1.SQL.Add('VALUES ('+quotedstr(edit1.text)+','+quotedstr(edit1.Text)+',''content'',''left'',''1'')');

Asi "intento" recuperar el resultado del Query

Código Delphi [-]
  Zquery1.SQL.Clear; // limpiamos query
  Zquery1.sql.add('select id from '+Edit5.Text +'.'+Edit6.text+ '_sections');  //memorizamos la nueva ID de la categoria
  Zquery1.SQL.add('WHERE name='+quotedstr(edit1.Text));

Supuestamente tendria que hacer algo como variable:=resultado del query pero no se me ocurre como.

He leido algo asi, pero luego me he dado cuenta ( o creo ) que es para pasar datos en vez de guardarlos

Código Delphi [-]
idcategoria:=Zquery1.FieldByName('id').AsInteger;

Muchas gracias por adelantado, espero que me podais hechar un cable ( pero q no sea al cuello :P )

Última edición por NeWsP fecha: 02-06-2007 a las 15:08:44.
Responder Con Cita
  #2  
Antiguo 02-06-2007
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
Aunque con el Zquery no he trabajado, supongo que el problema venga dado por no tener declarados los campos como persistentes.

Te pongo un ejemplo con un Tquery por si fuese de aplicación al Zquery.
Código Delphi [-]
idCategoria:=Tquery.Fields[0].AsInteger;

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
  #3  
Antiguo 02-06-2007
NeWsP NeWsP is offline
Miembro
 
Registrado: oct 2003
Ubicación: Barcelona
Posts: 57
Poder: 21
NeWsP Va por buen camino
Gracias por contestar marcos,

he probado como comentas y me da error de Out of Bounds (0)

Lo he probado asi

Código Delphi [-]
Zquery1.SQL.Clear; // liampiamos query
  Zquery1.sql.add('select `id` from '+Edit5.Text +'.'+Edit6.text+ '_sections');  //memorizamos la nueva ID de la categoria
  Zquery1.SQL.add('WHERE name='+quotedstr(edit1.Text));
  Zquery1.execsql;
  idcategoria:=Zquery1.Fields[0].AsInteger;


  label9.Caption:=inttostr(idcategoria);

Tambien he probado de hacer el execsql despues de la linea

Código Delphi [-]
  idcategoria:=Zquery1.Fields[0].AsInteger;

pero siempre con el mismo Out Of Bounds

pensaba que habria alguna forma de meter el resultado del sql en una variable, ya que hay casos como este, que unicamente puede dar un resultado.

Bueno, seguire mirando a ver si encuentro algo, muchas gracias
Responder Con Cita
  #4  
Antiguo 02-06-2007
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
He estado buscando y he encontrado el siguiente código:
Código Delphi [-]
function getsqlsubquerydatax(sql:string):string;
begin
  result:='';
  zquery.close;
  zquery.sql.text:=sql;
  zquery.open;
  zquery.first;
    while not zquery.eof do
    begin
       if result='' then result:=''''+zquery.fields[0].asstring+'''' else
       result:=result+','''+zquery.fields[0].asstring+'''';

       zquery.next;
    end;
  zquery.close;
    if result='' then result:='''''';

end;

Lo cual me confirma que el código que puse de ejemplo tiene que funcionar, claro que si la consulta no devuelve registros entonces te dara error porque no hay nada que cargar en la variable y por lo tanto la matriz de campos no existe.

Puedes utilizar si Zquer1.RecordCount o IsEmpty para comprobar primero que realmente ha devuelto registros y no acceder de esta manera a una matriz vacía.

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
  #5  
Antiguo 02-06-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Lo que pasa es que en el código, NeWsP está usando

Código Delphi [-]
Zquery1.execsql;

cuando debería ser

Código Delphi [-]
Zquery1.Open;

como hace Marcos. ExecSQL, al no estar pensada para consultas que devuelven registros, pues se ve que no prepara el dataset para ello.

// Saludos
Responder Con Cita
  #6  
Antiguo 02-06-2007
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
Pues no me había dado cuenta de ese detalle Román, daba por hecho que hacia un Open.

Sin duda por ahí viene el problema.

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
  #7  
Antiguo 02-06-2007
NeWsP NeWsP is offline
Miembro
 
Registrado: oct 2003
Ubicación: Barcelona
Posts: 57
Poder: 21
NeWsP Va por buen camino
Buenas tardes

pues si era eso U_U

Lo tenia que hacer con open, en vez de execsql ... ains

Muchisimas gracias por toda la ayuda que me estais dando, espero algun dia aprender lo suficiente, para poder ayudar a alguien U_U

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
asignar el resultado de un sql a una variable Cañones SQL 2 14-04-2007 15:29:43
Como asignar el resultado de una consulta a una variable Luis Cuenca Conexión con bases de datos 2 11-08-2006 16:27:32
Meter el resultado de un quey en una variable. SaLvaGe SQL 7 04-10-2004 09:01:08
Resultado de Consulta en Variable ¥0n1 SQL 1 30-12-2003 01:07:29
pasar resultado sql a una variable ?? Alex2000 SQL 7 08-12-2003 23:09:25


La franja horaria es GMT +2. Ahora son las 01:05:30.


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