Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Mailing lists / lazarus-es / 2008-11

[MySQL] Obtener el nombre de una tabla consultada

7 messages · 5 people · –

Reply by email Subscribe to this list Your subscription

Read-only archive. Use j and k to move between messages.

Usuario Anónimo

Hola, pongamos que tengo un programa que procesa consultas simples MySQL del tipo select * from Tabla mediante el componente TSQLQuery. Necesito guardar en una variable de tipo string el nombre de la tabla consultada. Ejemplo:

El programa procesa la siguiente consulta: select * from Carros;
procedure TForm1.ProcesaConsulta;
var
   i: integer; // Contador para recorrer los campos de un registro
    NombreTabla: string; // Variable de tipo string para almacenar el nombre
de la tabla
begin
    SQLQuery1.SQL.Text := 'select * from Carros';
    SQLQuery1.Open;
    SQLQuery1.First;
    while not SQLQuery1.EOF do // Este bucle recorre todos los registros de
la consulta, desde el primero al �ltimo
        begin
            for i := 0 to SQLQuery1.Fields.Count - 1 do // Muestra en
mensajes el contenido de cada campo del registro
                ShowMessage('Nombre del campo: ' +
SQLQuery1.Fields.Fields[i].FieldName +
                                     ' Contenido: ' +
SQLQuery1.FieldByName(SQLQuery1.Fields.Fields[i].FieldName).AsString);
            SQLQuery1.Next; // Pasa al siguiente registro
        end;
   NombreTabla := <no s� qu� asignar aqu�>; // NombraTabla ha de contener
Carros
end;

�C�mo puedo saber qu� tabla es la consultada? Ya se que es Carros y que puedo obtenerla mediante un manejo de cadenas pero me gustar�a saber si hay alguna forma m�s inmediata de hacerlo, pienso que puede que el sistema lo almacene por alg�n lado y no haga falta que haga un tratamiento de la cadena select * from Tabla para obtener el nombre de la tabla.

Muchas gracias.
------------ pr�xima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus.freepascal.org/pipermail/lazarus-es/attachments/20081114/6f5a5db4/attachment.html>

Reply by email

Carlos German Tejero
to Usuario Anónimo

Podrias probar con algo asi, porque el componente TSQLQuery no sabe cual es la tabla, ya que podrian ser mas de una:

procedure TForm1.ProcesaConsulta;
const
  QUERY = 'SELECT * FROM %s;';
  TABLE_NAME = 'carros';
var
   i: integer; // Contador para recorrer los campos de un registro
    NombreTabla: string; // Variable de tipo string para almacenar el nombre
de la tabla
begin
    SQLQuery1.SQL.Text := Format(QUERY, [TABLE_NAME]);
    SQLQuery1.Open;
    SQLQuery1.First;
    while not SQLQuery1.EOF do // Este bucle recorre todos los registros de
la consulta, desde el primero al �ltimo
        begin
            for i := 0 to SQLQuery1.Fields.Count - 1 do // Muestra en
mensajes el contenido de cada campo del registro
                ShowMessage('Nombre del campo: ' +
SQLQuery1.Fields.Fields[i].FieldName +
                                     ' Contenido: ' +
SQLQuery1.FieldByName(SQLQuery1.Fields.Fields[i].FieldName).AsString);
            SQLQuery1.Next; // Pasa al siguiente registro
        end;
   NombreTabla := TABLE_NAME
end;

2008/11/14 Usuario An�nimo <usuarioanonimomysql en gmail.com>

Show quoted text 50 lines
Hola, pongamos que tengo un programa que procesa consultas simples MySQL del tipo select * from Tabla mediante el componente TSQLQuery. Necesito guardar en una variable de tipo string el nombre de la tabla consultada. Ejemplo: El programa procesa la siguiente consulta: select * from Carros; procedure TForm1.ProcesaConsulta; var i: integer; // Contador para recorrer los campos de un registro NombreTabla: string; // Variable de tipo string para almacenar el nombre de la tabla begin SQLQuery1.SQL.Text := 'select * from Carros'; SQLQuery1.Open; SQLQuery1.First; while not SQLQuery1.EOF do // Este bucle recorre todos los registros de la consulta, desde el primero al �ltimo begin for i := 0 to SQLQuery1.Fields.Count - 1 do // Muestra en mensajes el contenido de cada campo del registro ShowMessage('Nombre del campo: ' + SQLQuery1.Fields.Fields[i].FieldName + ' Contenido: ' + SQLQuery1.FieldByName(SQLQuery1.Fields.Fields[i].FieldName).AsString); SQLQuery1.Next; // Pasa al siguiente registro end; NombreTabla := <no s� qu� asignar aqu�>; // NombraTabla ha de contener Carros end; �C�mo puedo saber qu� tabla es la consultada? Ya se que es Carros y que puedo obtenerla mediante un manejo de cadenas pero me gustar�a saber si hay alguna forma m�s inmediata de hacerlo, pienso que puede que el sistema lo almacene por alg�n lado y no haga falta que haga un tratamiento de la cadena select * from Tabla para obtener el nombre de la tabla. Muchas gracias. _______________________________________________ Lazarus-es mailing list Lazarus-es en lazarus.freepascal.org http://www.lazarus.freepascal.org/mailman/listinfo/lazarus-es
Carlos Germ�n Tejero ------------ pr�xima parte ------------ Se ha borrado un adjunto en formato HTML... URL: <http://lists.lazarus.freepascal.org/pipermail/lazarus-es/attachments/20081114/ca000986/attachment.html>

Reply by email

Usuario Anónimo
to Carlos German Tejero

Pero seg�n eso que has puesto el nombre de la tabla siempre va a ser el contenido de la constante TABLE_NAME y yo quiero que sea algo din�mico, independientemente de la consulta, es decir, quiero obtener el nombre de la tabla.

Saludos.

2008/11/14 Carlos German Tejero <german_tejero en yahoo.com.ar>

Show quoted text 102 lines
Podrias probar con algo asi, porque el componente TSQLQuery no sabe cual es la tabla, ya que podrian ser mas de una: procedure TForm1.ProcesaConsulta; const QUERY = 'SELECT * FROM %s;'; TABLE_NAME = 'carros'; var i: integer; // Contador para recorrer los campos de un registro NombreTabla: string; // Variable de tipo string para almacenar el nombre de la tabla begin SQLQuery1.SQL.Text := Format(QUERY, [TABLE_NAME]); SQLQuery1.Open; SQLQuery1.First; while not SQLQuery1.EOF do // Este bucle recorre todos los registros de la consulta, desde el primero al �ltimo begin for i := 0 to SQLQuery1.Fields.Count - 1 do // Muestra en mensajes el contenido de cada campo del registro ShowMessage('Nombre del campo: ' + SQLQuery1.Fields.Fields[i].FieldName + ' Contenido: ' + SQLQuery1.FieldByName(SQLQuery1.Fields.Fields[i].FieldName).AsString); SQLQuery1.Next; // Pasa al siguiente registro end; NombreTabla := TABLE_NAME end; 2008/11/14 Usuario An�nimo <usuarioanonimomysql en gmail.com> > Hola, pongamos que tengo un programa que procesa consultas simples MySQL > del tipo select * from Tabla mediante el componente TSQLQuery. Necesito > guardar en una variable de tipo string el nombre de la tabla consultada. > Ejemplo: > > El programa procesa la siguiente consulta: select * from Carros; > > procedure TForm1.ProcesaConsulta; > > var > > i: integer; // Contador para recorrer los campos de un registro > > NombreTabla: string; // Variable de tipo string para almacenar el > nombre de la tabla > > begin > SQLQuery1.SQL.Text := 'select * from Carros'; > SQLQuery1.Open; > SQLQuery1.First; > while not SQLQuery1.EOF do // Este bucle recorre todos los registros > de la consulta, desde el primero al �ltimo > begin > for i := 0 to SQLQuery1.Fields.Count - 1 do // Muestra en > mensajes el contenido de cada campo del registro > ShowMessage('Nombre del campo: ' + > SQLQuery1.Fields.Fields[i].FieldName + > ' Contenido: ' + > SQLQuery1.FieldByName(SQLQuery1.Fields.Fields[i].FieldName).AsString); > SQLQuery1.Next; // Pasa al siguiente registro > end; > NombreTabla := <no s� qu� asignar aqu�>; // NombraTabla ha de contener > Carros > end; > > �C�mo puedo saber qu� tabla es la consultada? Ya se que es Carros y que > puedo obtenerla mediante un manejo de cadenas pero me gustar�a saber si hay > alguna forma m�s inmediata de hacerlo, pienso que puede que el sistema lo > almacene por alg�n lado y no haga falta que haga un tratamiento de la cadena > select * from Tabla para obtener el nombre de la tabla. > > Muchas gracias. > > > _______________________________________________ > Lazarus-es mailing list > Lazarus-es en lazarus.freepascal.org > http://www.lazarus.freepascal.org/mailman/listinfo/lazarus-es > > -- Carlos Germ�n Tejero _______________________________________________ Lazarus-es mailing list Lazarus-es en lazarus.freepascal.org http://www.lazarus.freepascal.org/mailman/listinfo/lazarus-es

------------ pr�xima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus.freepascal.org/pipermail/lazarus-es/attachments/20081114/1d23a236/attachment.html>

Reply by email

Carlos German Tejero
to Usuario Anónimo

Entonces podrias hacer algo asi:

procedure TForm1.ProcesaConsulta(const TABLE_NAME:string);
const
  QUERY = 'SELECT * FROM %s;';
var
   i: integer; // Contador para recorrer los campos de un registro
    NombreTabla: string; // Variable de tipo string para almacenar el nombre
de la tabla
begin
    SQLQuery1.SQL.Text := Format(QUERY, [TABLE_NAME]);
    SQLQuery1.Open;
    SQLQuery1.First;
    while not SQLQuery1.EOF do // Este bucle recorre todos los registros de
la consulta, desde el primero al �ltimo
        begin
            for i := 0 to SQLQuery1.Fields.Count - 1 do // Muestra en
mensajes el contenido de cada campo del registro
                ShowMessage('Nombre del campo: ' +
SQLQuery1.Fields.Fields[i].FieldName +
                                     ' Contenido: ' +
SQLQuery1.FieldByName(SQLQuery1.Fields.Fields[i].FieldName).AsString);
            SQLQuery1.Next; // Pasa al siguiente registro
        end;
   NombreTabla := TABLE_NAME
end;
y llamar a ProcesaConsulta('carros');

2008/11/14 Usuario An�nimo <usuarioanonimomysql en gmail.com>

Show quoted text 118 lines
Pero seg�n eso que has puesto el nombre de la tabla siempre va a ser el contenido de la constante TABLE_NAME y yo quiero que sea algo din�mico, independientemente de la consulta, es decir, quiero obtener el nombre de la tabla. Saludos. 2008/11/14 Carlos German Tejero <german_tejero en yahoo.com.ar> Podrias probar con algo asi, porque el componente TSQLQuery no sabe cual es > la tabla, ya que podrian ser mas de una: > > > procedure TForm1.ProcesaConsulta; > > const > > QUERY = 'SELECT * FROM %s;'; > > TABLE_NAME = 'carros'; > > var > > i: integer; // Contador para recorrer los campos de un registro > > NombreTabla: string; // Variable de tipo string para almacenar el > nombre de la tabla > > begin > SQLQuery1.SQL.Text := Format(QUERY, [TABLE_NAME]); > SQLQuery1.Open; > SQLQuery1.First; > while not SQLQuery1.EOF do // Este bucle recorre todos los registros > de la consulta, desde el primero al �ltimo > begin > for i := 0 to SQLQuery1.Fields.Count - 1 do // Muestra en > mensajes el contenido de cada campo del registro > ShowMessage('Nombre del campo: ' + > SQLQuery1.Fields.Fields[i].FieldName + > ' Contenido: ' + > SQLQuery1.FieldByName(SQLQuery1.Fields.Fields[i].FieldName).AsString); > SQLQuery1.Next; // Pasa al siguiente registro > end; > NombreTabla := TABLE_NAME > end; > > > > 2008/11/14 Usuario An�nimo <usuarioanonimomysql en gmail.com> > >> Hola, pongamos que tengo un programa que procesa consultas simples MySQL >> del tipo select * from Tabla mediante el componente TSQLQuery. Necesito >> guardar en una variable de tipo string el nombre de la tabla consultada. >> Ejemplo: >> >> El programa procesa la siguiente consulta: select * from Carros; >> >> procedure TForm1.ProcesaConsulta; >> >> var >> >> i: integer; // Contador para recorrer los campos de un registro >> >> NombreTabla: string; // Variable de tipo string para almacenar el >> nombre de la tabla >> >> begin >> SQLQuery1.SQL.Text := 'select * from Carros'; >> SQLQuery1.Open; >> SQLQuery1.First; >> while not SQLQuery1.EOF do // Este bucle recorre todos los registros >> de la consulta, desde el primero al �ltimo >> begin >> for i := 0 to SQLQuery1.Fields.Count - 1 do // Muestra en >> mensajes el contenido de cada campo del registro >> ShowMessage('Nombre del campo: ' + >> SQLQuery1.Fields.Fields[i].FieldName + >> ' Contenido: ' + >> SQLQuery1.FieldByName(SQLQuery1.Fields.Fields[i].FieldName).AsString); >> SQLQuery1.Next; // Pasa al siguiente registro >> end; >> NombreTabla := <no s� qu� asignar aqu�>; // NombraTabla ha de contener >> Carros >> end; >> >> �C�mo puedo saber qu� tabla es la consultada? Ya se que es Carros y que >> puedo obtenerla mediante un manejo de cadenas pero me gustar�a saber si hay >> alguna forma m�s inmediata de hacerlo, pienso que puede que el sistema lo >> almacene por alg�n lado y no haga falta que haga un tratamiento de la cadena >> select * from Tabla para obtener el nombre de la tabla. >> >> Muchas gracias. >> >> >> _______________________________________________ >> Lazarus-es mailing list >> Lazarus-es en lazarus.freepascal.org >> http://www.lazarus.freepascal.org/mailman/listinfo/lazarus-es >> >> > > > -- > Carlos Germ�n Tejero > > _______________________________________________ > Lazarus-es mailing list > Lazarus-es en lazarus.freepascal.org > http://www.lazarus.freepascal.org/mailman/listinfo/lazarus-es > > _______________________________________________ Lazarus-es mailing list Lazarus-es en lazarus.freepascal.org http://www.lazarus.freepascal.org/mailman/listinfo/lazarus-es
Carlos Germ�n Tejero ------------ pr�xima parte ------------ Se ha borrado un adjunto en formato HTML... URL: <http://lists.lazarus.freepascal.org/pipermail/lazarus-es/attachments/20081114/7241672a/attachment.html>

Reply by email

User
to Carlos German Tejero

Hola de nuevo, no, no es eso, yo lo �nico que le digo al sistema es:

toma aqu� tienes esta consulta: 'selec * from Carros'

ahora dime que tabla ha sido la consultada, y el sistema me devuelva: Carros o la que sea

No se si me explico.

Saludos.

2008/11/14 Carlos German Tejero <german_tejero en yahoo.com.ar>

Show quoted text 167 lines
Entonces podrias hacer algo asi: procedure TForm1.ProcesaConsulta(const TABLE_NAME:string); const QUERY = 'SELECT * FROM %s;'; var i: integer; // Contador para recorrer los campos de un registro NombreTabla: string; // Variable de tipo string para almacenar el nombre de la tabla begin SQLQuery1.SQL.Text := Format(QUERY, [TABLE_NAME]); SQLQuery1.Open; SQLQuery1.First; while not SQLQuery1.EOF do // Este bucle recorre todos los registros de la consulta, desde el primero al �ltimo begin for i := 0 to SQLQuery1.Fields.Count - 1 do // Muestra en mensajes el contenido de cada campo del registro ShowMessage('Nombre del campo: ' + SQLQuery1.Fields.Fields[i].FieldName + ' Contenido: ' + SQLQuery1.FieldByName(SQLQuery1.Fields.Fields[i].FieldName).AsString); SQLQuery1.Next; // Pasa al siguiente registro end; NombreTabla := TABLE_NAME end; y llamar a ProcesaConsulta('carros'); 2008/11/14 Usuario An�nimo <usuarioanonimomysql en gmail.com> > Pero seg�n eso que has puesto el nombre de la tabla siempre va a ser el > contenido de la constante TABLE_NAME y yo quiero que sea algo din�mico, > independientemente de la consulta, es decir, quiero obtener el nombre de la > tabla. > > Saludos. > > 2008/11/14 Carlos German Tejero <german_tejero en yahoo.com.ar> > >> Podrias probar con algo asi, porque el componente TSQLQuery no sabe cual >> es la tabla, ya que podrian ser mas de una: >> >> >> procedure TForm1.ProcesaConsulta; >> >> const >> >> QUERY = 'SELECT * FROM %s;'; >> >> TABLE_NAME = 'carros'; >> >> var >> >> i: integer; // Contador para recorrer los campos de un registro >> >> NombreTabla: string; // Variable de tipo string para almacenar el >> nombre de la tabla >> >> begin >> SQLQuery1.SQL.Text := Format(QUERY, [TABLE_NAME]); >> SQLQuery1.Open; >> SQLQuery1.First; >> while not SQLQuery1.EOF do // Este bucle recorre todos los registros >> de la consulta, desde el primero al �ltimo >> begin >> for i := 0 to SQLQuery1.Fields.Count - 1 do // Muestra en >> mensajes el contenido de cada campo del registro >> ShowMessage('Nombre del campo: ' + >> SQLQuery1.Fields.Fields[i].FieldName + >> ' Contenido: ' + >> SQLQuery1.FieldByName(SQLQuery1.Fields.Fields[i].FieldName).AsString); >> SQLQuery1.Next; // Pasa al siguiente registro >> end; >> NombreTabla := TABLE_NAME >> end; >> >> >> >> 2008/11/14 Usuario An�nimo <usuarioanonimomysql en gmail.com> >> >>> Hola, pongamos que tengo un programa que procesa consultas simples MySQL >>> del tipo select * from Tabla mediante el componente TSQLQuery. Necesito >>> guardar en una variable de tipo string el nombre de la tabla consultada. >>> Ejemplo: >>> >>> El programa procesa la siguiente consulta: select * from Carros; >>> >>> procedure TForm1.ProcesaConsulta; >>> >>> var >>> >>> i: integer; // Contador para recorrer los campos de un registro >>> >>> NombreTabla: string; // Variable de tipo string para almacenar el >>> nombre de la tabla >>> >>> begin >>> SQLQuery1.SQL.Text := 'select * from Carros'; >>> SQLQuery1.Open; >>> SQLQuery1.First; >>> while not SQLQuery1.EOF do // Este bucle recorre todos los registros >>> de la consulta, desde el primero al �ltimo >>> begin >>> for i := 0 to SQLQuery1.Fields.Count - 1 do // Muestra en >>> mensajes el contenido de cada campo del registro >>> ShowMessage('Nombre del campo: ' + >>> SQLQuery1.Fields.Fields[i].FieldName + >>> ' Contenido: ' + >>> SQLQuery1.FieldByName(SQLQuery1.Fields.Fields[i].FieldName).AsString); >>> SQLQuery1.Next; // Pasa al siguiente registro >>> end; >>> NombreTabla := <no s� qu� asignar aqu�>; // NombraTabla ha de >>> contener Carros >>> end; >>> >>> �C�mo puedo saber qu� tabla es la consultada? Ya se que es Carros y que >>> puedo obtenerla mediante un manejo de cadenas pero me gustar�a saber si hay >>> alguna forma m�s inmediata de hacerlo, pienso que puede que el sistema lo >>> almacene por alg�n lado y no haga falta que haga un tratamiento de la cadena >>> select * from Tabla para obtener el nombre de la tabla. >>> >>> Muchas gracias. >>> >>> >>> _______________________________________________ >>> Lazarus-es mailing list >>> Lazarus-es en lazarus.freepascal.org >>> http://www.lazarus.freepascal.org/mailman/listinfo/lazarus-es >>> >>> >> >> >> -- >> Carlos Germ�n Tejero >> >> _______________________________________________ >> Lazarus-es mailing list >> Lazarus-es en lazarus.freepascal.org >> http://www.lazarus.freepascal.org/mailman/listinfo/lazarus-es >> >> > > _______________________________________________ > Lazarus-es mailing list > Lazarus-es en lazarus.freepascal.org > http://www.lazarus.freepascal.org/mailman/listinfo/lazarus-es > > -- Carlos Germ�n Tejero _______________________________________________ Lazarus-es mailing list Lazarus-es en lazarus.freepascal.org http://www.lazarus.freepascal.org/mailman/listinfo/lazarus-es

------------ pr�xima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus.freepascal.org/pipermail/lazarus-es/attachments/20081114/aa73d84e/attachment.html>

Reply by email

Markisich Emiliano
to User

Hola, eso lo podes hacer con un Trigger, creas una tabla de historial y un trigger que cuando se realize un insert o delete o update se dispare y agregue un registro en la tabla historial.
lo que no se si funciona con un select.
otra cosa esto depende de que motor de base de datos estes usando.

saludos

CREATE TRIGGER NOMBRE ACTIVE
BEFORE INSERT OR UPDATE POSITION 12
AS
BEGIN

    IF (INSERTING) THEN
    BEGIN
       /(AGREGO en la tabla de historial)/
    END
    ELSE
    IF (UPDATING) THEN
    BEGIN
           /(AGREGO en la tabla de historial)/
    END

END^
SET TERM ; ^

User escribi�:

Show quoted text 213 lines
Hola de nuevo, no, no es eso, yo lo �nico que le digo al sistema es: toma aqu� tienes esta consulta: 'selec * from Carros' ahora dime que tabla ha sido la consultada, y el sistema me devuelva: Carros o la que sea No se si me explico. Saludos. 2008/11/14 Carlos German Tejero <german_tejero en yahoo.com.ar <mailto:german_tejero en yahoo.com.ar>> Entonces podrias hacer algo asi: procedure TForm1.ProcesaConsulta(const TABLE_NAME:string); const QUERY = 'SELECT * FROM %s;'; var i: integer; // Contador para recorrer los campos de un registro NombreTabla: string; // Variable de tipo string para almacenar el nombre de la tabla begin SQLQuery1.SQL.Text := Format(QUERY, [TABLE_NAME]); SQLQuery1.Open; SQLQuery1.First; while not SQLQuery1.EOF do // Este bucle recorre todos los registros de la consulta, desde el primero al �ltimo begin for i := 0 to SQLQuery1.Fields.Count - 1 do // Muestra en mensajes el contenido de cada campo del registro ShowMessage('Nombre del campo: ' + SQLQuery1.Fields.Fields[i].FieldName + ' Contenido: ' + SQLQuery1.FieldByName(SQLQuery1.Fields.Fields[i].FieldName).AsString); SQLQuery1.Next; // Pasa al siguiente registro end; NombreTabla := TABLE_NAME end; y llamar a ProcesaConsulta('carros'); 2008/11/14 Usuario An�nimo <usuarioanonimomysql en gmail.com <mailto:usuarioanonimomysql en gmail.com>> Pero seg�n eso que has puesto el nombre de la tabla siempre va a ser el contenido de la constante TABLE_NAME y yo quiero que sea algo din�mico, independientemente de la consulta, es decir, quiero obtener el nombre de la tabla. Saludos. 2008/11/14 Carlos German Tejero <german_tejero en yahoo.com.ar <mailto:german_tejero en yahoo.com.ar>> Podrias probar con algo asi, porque el componente TSQLQuery no sabe cual es la tabla, ya que podrian ser mas de una: procedure TForm1.ProcesaConsulta; const QUERY = 'SELECT * FROM %s;'; TABLE_NAME = 'carros'; var i: integer; // Contador para recorrer los campos de un registro NombreTabla: string; // Variable de tipo string para almacenar el nombre de la tabla begin SQLQuery1.SQL.Text := Format(QUERY, [TABLE_NAME]); SQLQuery1.Open; SQLQuery1.First; while not SQLQuery1.EOF do // Este bucle recorre todos los registros de la consulta, desde el primero al �ltimo begin for i := 0 to SQLQuery1.Fields.Count - 1 do // Muestra en mensajes el contenido de cada campo del registro ShowMessage('Nombre del campo: ' + SQLQuery1.Fields.Fields[i].FieldName + ' Contenido: ' + SQLQuery1.FieldByName(SQLQuery1.Fields.Fields[i].FieldName).AsString); SQLQuery1.Next; // Pasa al siguiente registro end; NombreTabla := TABLE_NAME end; 2008/11/14 Usuario An�nimo <usuarioanonimomysql en gmail.com <mailto:usuarioanonimomysql en gmail.com>> Hola, pongamos que tengo un programa que procesa consultas simples MySQL del tipo select * from Tabla mediante el componente TSQLQuery. Necesito guardar en una variable de tipo string el nombre de la tabla consultada. Ejemplo: El programa procesa la siguiente consulta: select * from Carros; procedure TForm1.ProcesaConsulta; var i: integer; // Contador para recorrer los campos de un registro NombreTabla: string; // Variable de tipo string para almacenar el nombre de la tabla begin SQLQuery1.SQL.Text := 'select * from Carros'; SQLQuery1.Open; SQLQuery1.First; while not SQLQuery1.EOF do // Este bucle recorre todos los registros de la consulta, desde el primero al �ltimo begin for i := 0 to SQLQuery1.Fields.Count - 1 do // Muestra en mensajes el contenido de cada campo del registro ShowMessage('Nombre del campo: ' + SQLQuery1.Fields.Fields[i].FieldName + ' Contenido: ' + SQLQuery1.FieldByName(SQLQuery1.Fields.Fields[i].FieldName).AsString); SQLQuery1.Next; // Pasa al siguiente registro end; NombreTabla := <no s� qu� asignar aqu�>; // NombraTabla ha de contener Carros end; �C�mo puedo saber qu� tabla es la consultada? Ya se que es Carros y que puedo obtenerla mediante un manejo de cadenas pero me gustar�a saber si hay alguna forma m�s inmediata de hacerlo, pienso que puede que el sistema lo almacene por alg�n lado y no haga falta que haga un tratamiento de la cadena select * from Tabla para obtener el nombre de la tabla. Muchas gracias. _______________________________________________ Lazarus-es mailing list Lazarus-es en lazarus.freepascal.org <mailto:Lazarus-es en lazarus.freepascal.org> http://www.lazarus.freepascal.org/mailman/listinfo/lazarus-es -- Carlos Germ�n Tejero _______________________________________________ Lazarus-es mailing list Lazarus-es en lazarus.freepascal.org <mailto:Lazarus-es en lazarus.freepascal.org> http://www.lazarus.freepascal.org/mailman/listinfo/lazarus-es _______________________________________________ Lazarus-es mailing list Lazarus-es en lazarus.freepascal.org <mailto:Lazarus-es en lazarus.freepascal.org> http://www.lazarus.freepascal.org/mailman/listinfo/lazarus-es -- Carlos Germ�n Tejero _______________________________________________ Lazarus-es mailing list Lazarus-es en lazarus.freepascal.org <mailto:Lazarus-es en lazarus.freepascal.org> http://www.lazarus.freepascal.org/mailman/listinfo/lazarus-es ------------------------------------------------------------------------ _______________________________________________ Lazarus-es mailing list Lazarus-es en lazarus.freepascal.org http://www.lazarus.freepascal.org/mailman/listinfo/lazarus-es

Reply by email

Javier Jait
to Usuario Anónimo: Hola, pongamos que tengo un programa que procesa consultas simples MySQL del tipo select…

Calculo que tenes 2 opciones.
Una ser�a modificar el FPC para que publicar la propiedad TableName, el componente TCustomCustomQuery tiene una variable FTableName que es privada. Yo trate de hacerlo pero tuve problemas para recompilar el FPC y que Lazarus lo tome.
La otra opci�n es que busques el c�digo de TCustomSQLQuery.SQLParser que hay separa la informaci�n y le da el valor a FTableName. A lo mejor ejecutando eso, pod�s obtener el nombre de la tabla.
Por �ltimo, podr�as buscar en SQLQuery.SQL.Text, el texto que viene despu�s de from, eso ser�a el nombre de la tabla.

Saludos

_____

De: lazarus-es-bounces en lazarus.freepascal.org
[mailto:lazarus-es-bounces en lazarus.freepascal.org] En nombre de Usuario An�nimo
Enviado el: Viernes, 14 de Noviembre de 2008 10:07 Para: Spanish version of Lazarus List
Asunto: [Lazarus-es] [MySQL] Obtener el nombre de una tabla consultada

Hola, pongamos que tengo un programa que procesa consultas simples MySQL del tipo select * from Tabla mediante el componente TSQLQuery. Necesito guardar en una variable de tipo string el nombre de la tabla consultada. Ejemplo:

El programa procesa la siguiente consulta: select * from Carros;
procedure TForm1.ProcesaConsulta;
var
   i: integer; // Contador para recorrer los campos de un registro
    NombreTabla: string; // Variable de tipo string para almacenar el nombre
de la tabla
begin
    SQLQuery1.SQL.Text := 'select * from Carros';
    SQLQuery1.Open;
    SQLQuery1.First;
    while not SQLQuery1.EOF do // Este bucle recorre todos los registros de
la consulta, desde el primero al �ltimo
        begin
            for i := 0 to SQLQuery1.Fields.Count - 1 do // Muestra en
mensajes el contenido de cada campo del registro
                ShowMessage('Nombre del campo: ' +
SQLQuery1.Fields.Fields[i].FieldName +
                                     ' Contenido: ' +
SQLQuery1.FieldByName(SQLQuery1.Fields.Fields[i].FieldName).AsString);
            SQLQuery1.Next; // Pasa al siguiente registro
        end;
   NombreTabla := <no s� qu� asignar aqu�>; // NombraTabla ha de contener
Carros
end;

�C�mo puedo saber qu� tabla es la consultada? Ya se que es Carros y que puedo obtenerla mediante un manejo de cadenas pero me gustar�a saber si hay alguna forma m�s inmediata de hacerlo, pienso que puede que el sistema lo almacene por alg�n lado y no haga falta que haga un tratamiento de la cadena select * from Tabla para obtener el nombre de la tabla.

Muchas gracias.

------------ pr�xima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus.freepascal.org/pipermail/lazarus-es/attachments/20081115/0097a282/attachment.html>

Reply by email