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)
-   -   ¿Como Copiar Un Solo valor en Tablas Access? (https://www.clubdelphi.com/foros/showthread.php?t=67497)

wiwaedu 20-04-2010 01:07:07

¿Como Copiar Un Solo valor en Tablas Access?
 
Tengo dos tablas en una base de datos access:

Tabla A: con los campos: ITEMID,ITEMNAME,ITEMDESCR
Tabla B: con los campos: NUMID, CANTIDAD

Necesito pasar el valor de ITEMID a NUMID y ademas añadirle la CANTIDAD desde un TEdit

Estoy perdido, he estado probando con SQL. Pero siempre me da fallo.

Gracias.

Chris 20-04-2010 01:13:16

Cita:

Empezado por wiwaedu (Mensaje 361152)
Tengo dos tablas en una base de datos access:

Tabla A: con los campos: ITEMID,ITEMNAME,ITEMDESCR
Tabla B: con los campos: NUMID, CANTIDAD

Necesito pasar el valor de ITEMID a NUMID y ademas añadirle la CANTIDAD desde un TEdit

Estoy perdido, he estado probando con SQL. Pero siempre me da fallo.

Gracias.

Primero, que tipo de fallo? Que dice el error?

Segundo, muestranos la consulta SQL que estás usando.

Por último, de que forma quieres pasar el ITEMID a NUMID. De un sólo (todos los registros) o ir uno x uno y asignando el valor del campo Cantidad con el Edit manualmente. Quisiera aclararas esté punto.

Saludos,
Chris

PD.: No soy el indicado para ayudarte con Access, pero te digo lo anterior, porque alguien igual lo hará.

wiwaedu 20-04-2010 01:29:25

Tengo este código:

Código:

with QCopy do
begin
Active := false;
SQL.Clear;
SQL.Text := 'INSERT INTO B(NumSet,Cantidad) VALUES ("'+DBEdit1.Text+'",'+Edit1.Text+')';
Active := true;
end;

Qcopy es un Query apuntando a la tabla A

El caso es, que los datos algunas veces los copia.

ERROR: QCopy: CommandText does not return a result set.

Chris 20-04-2010 01:33:06

mmm entiendo. Creo que tu problema está en la última línea de tu código, en donde dice: "Active := True". Active ú Opensólo debe utilizarse para las consultas "SELECT". Para las consultas "INSERT o UPDATE" en lugar de "Active" debes utilizar "ExecSQL" o "Execute" si es que mal no recuerdo los nombres de estas rutinas. Has la prueba y nos comentas.

Saludos,
Chris

wiwaedu 20-04-2010 01:47:54

Muchas Gracias desactivando el
Código:

Active := true;
y poniendo:
Código:

ExecSQL;
Ha funcionado, ahora tengo el problema de que no me Actualiza el DBGrid que muestras los datos de la tabla B al hacer los cambios :(

wiwaedu 20-04-2010 01:52:29

¿Seria correcto hacer esto?:

Código:

procedure TImpBL.Button1Click(Sender: TObject);
begin
ADOTable1.Active:= False;
with QCopy do
begin
Active := false;
SQL.Clear;
SQL.Text := 'INSERT INTO B(NumSet,Cantidad) VALUES("'+DBEdit1.Text+'",'+Edit1.Text+')';
ExecSQL;
end;
ADOTable1.Active := True;
end;


Caral 20-04-2010 02:54:04

Hola
No entiendo bien lo que tratas de hacer, veamos:
Si, en teoria el DBEdit1 esta conectado al adotable como va a contener algun dato si lo cierras o desactivas en la consulta?, por lo menos eso es lo que capto.
Digamos que tienes una tabla activa que contiene los datos:
ITEMID, ITEMNAME, ITEMDESCR
Y uno de esos datos esta o es mostrado en el dbedit, entonces no deberias cerrar este adotable, tendrias que mantenerlo activo.
Veamos como funcionaria esto:
Código Delphi [-]
procedure TImpBL.Button1Click(Sender: TObject);
begin
with QCopy do
begin
SQL.Text := 'INSERT INTO B (NumSet, Cantidad) VALUES(:Num, :dato)';
Parameters[0].Value:= DBEdit1.text;
Parameters[1].Value:= Edit1.text;
ExecSQL;
end;
ADOTable1.Active:= False;
ADOTable1.Active := True;
end;
Aveces, por que ya me ha pasado, access no le da la gana de leer los dbedit dentro de las consultas, por eso lo hago por parametros.
Espero te ayude en algo.
Saludos

Chris 20-04-2010 17:16:56

Cita:

Empezado por wiwaedu (Mensaje 361163)
¿Seria correcto hacer esto?:

Código:

procedure TImpBL.Button1Click(Sender: TObject);
begin
ADOTable1.Active:= False;
with QCopy do
begin
Active := false;
SQL.Clear;
SQL.Text := 'INSERT INTO B(NumSet,Cantidad) VALUES("'+DBEdit1.Text+'",'+Edit1.Text+')';
ExecSQL;
end;
ADOTable1.Active := True;
end;


Si te puede servir así a cómo lo escribes. Siempre y cuando el ADOTable1 esté conectado a la tabla B. Si aún así no se te muestran, supongo que sería por configuración de transacciones o algo así. Nuevamente te repito que de Access yo no sé nada :(

wiwaedu 27-04-2010 01:42:53

Muchas Gracias! ya lo tengo funcionando!


La franja horaria es GMT +2. Ahora son las 00:04:31.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi