Foros Club Delphi

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

Eduard23 17-11-2023 03:38:32

FDMemTable
 
Buenas amigos necesito de su valiosa ayuda. tengo una aplicacion en delphi y uso MySQL como base de datos.
Necesito Hacer un insert into desde un FDMemtable, aclaro que ya el FDMemTable esta lleno con un query previo solo necesito agregar todos los registros contenidos en el FDMemTable1.

Código SQL [-]
Insert into Table1 Select * from FDMemtable1

Algo asi es mi codigo
Código Delphi [-]
Var  cDatabase2,cDataBase3 : String;

    cDataBase2:='Table1'
    cDataBase3:='FDMemTable1';
    Query1.SQL.Clear;
    Query1.SQL.Add('Insert Into '+cDataBase2+' Select * From '+cDcDatabase3);
    Query1.ExecSQL;
si lo hago asi arroja este error -->Incompatible types: 'string' and 'TFDMemTable'

Otra Manera de Declarar las Varia les
Declaro cDataBase3 : TFDMemtable;

Código Delphi [-]
    cDataBase2:='Table1'
    cDataBase3:=FDMemTable1;
    Query1.SQL.Clear;
    Query1.SQL.Add('Insert Into '+cDataBase2+' Select * From '+cDcDatabase3);
    Query1.ExecSQL;
Arroje el siguiente error --> No Existe la Tabla FDMemtable1

Muchas Gracias de Antemano....

duilioisola 17-11-2023 10:38:27

Creo que estás tratando de utilizar cosas de delphi en MySQL.

En Delphi tienes la tabla en memoria.
En MySQL tienes una tabla (manejada por el serividor MySQL).

Por lo tanto debes recorrer la tabla Delphi diciéndole a MySQL que los ponga en una tabla (Haciendo SQL para insertar (INSERT INTO TABLA ([CAMPOS]) VALUES ([VALORES])).

Algó así, pero tendrás que revisar tipos de datos, SQL, meter el ExecSQL en un bloque try..except por si falla, etc.

Código Delphi [-]
// Me posiciono en el primer registro
FDMemTable1.First;

// Recorro el dataset
while not FDMemTable1.EOF do
begin
    // Inserto datos en MySQL
    Query1.SQL.Clear;
    Query1.SQL.Add('Insert Into Tabla (Camppo1, Campo2, Campo3, ...) Values (:Valor1, :Valor2, :Valor3, ...)');
    Query1.Params.ByName('Valor1').AsString := FDMemTable1.FieldByName('Campo1').AsString;
    Query1.Params.ByName('Valor2').AsInteger := FDMemTable1.FieldByName('Campo2').AsInteger;
    Query1.Params.ByName('Valor3').AsDateTime := FDMemTable1.FieldByName('Campo3').AsDateTime;
    ...
    Query1.ExecSQL;

    // Siguiente registro
    FDMemTable1.Next;
end

Además de esto, por los nombres de variables que utilizas creo que estás liando un poco los conceptos.

Base de Datos: Es la entidad que contiene tablas. Manejada por el servidor de base de datos (MySQL).
Tabla: Cada una de las estructuras que contienen registros con una estructura definida.
Registro: Cada "línea" de una tabla.
Campo: Cada "celda" de un registro.

Neftali [Germán.Estévez] 17-11-2023 12:38:46

Cita:

Empezado por Eduard23 (Mensaje 553316)
Algo asi es mi codigo


Código Delphi [-]
Var 
cDatabase2,cDataBase3 : String; 
...

  cDataBase2:='Table1' 
  cDataBase3:='FDMemTable1'; 
  Query1.SQL.Clear; 
  Query1.SQL.Add('Insert Into '+cDataBase2+' Select * From '+cDcDatabase3); 
  Query1.ExecSQL;
si lo hago asi arroja este error -->Incompatible types: 'string' and 'TFDMemTable'


La variable (string) que estás utilizando en la Query1 no es la misma que has definido arriba.

Eduard23 17-11-2023 16:10:08

muchas Gracias duilioisola por tu respuesta voy a probarla
Saludos


La franja horaria es GMT +2. Ahora son las 00:10:11.

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