Ir para conteúdo
Fórum Script Brasil
  • 0

actualizar dados tabelas TADOCommand


rebotea

Pergunta

Como poderei actualizar dados existentes na tabelas2 para a tabelas1 com TADOCommand a que esta muito dificil..

TableMaster(metria_Sub_Sub)

numeracao_sub long AUTO

numeracao long

Foto1 text(50)

Foto2 text(50)

Analisefoto1 text(50)

Observações memo Y

Obra text(250)

Designação_equipamento text(250)

DetailTable

numeracao_sub_EQ long AUTO

numeracao_sub long

Designação_equipamento text(250)

Tensão text(50)

Potençia text(50)

Tipo_equipamento text(50)

Localização text(50)

Foto_PontosMed text(50)

InterruptorDiferencial text(50)

actualizar registos selecionados na tabela network apos abrir a base de dados local

Cenecao_casa.Connected:= false;

OpenDialog1.FileName:=(localAplicação+'db\'+'base_dados.mdb');

lcasa.Caption:=(OpenDialog1.FileName);

Cenecao_casa.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+OpenDialog1.FileName+';Persist Security Info=False';

Cenecao_casa.Connected:= True;

ADOTable_casa.Open;

ADOTable_casa_Sub.Open;

DevolverBD.Visible:=true;

//Verifica a opção escolhida por Telefone

Begin

with ADOTable_casa do //Laço de consulta por codigo

Begin

Close;

SQL.Clear;

SQL.Add('SELECT * from Diferencias_sub_sub');

SQL.Add('Where numeracao_sub LIKE ''%'+cxDBTextEdit3.text+'%''');

Open;

end;

(local copy) (base_dados.mdb .. na base_dados.mdb)

Editado por rebotea
Link para o comentário
Compartilhar em outros sites

19 respostass a esta questão

Posts Recomendados

  • 0

e isso ai mas o que eu desejava mesmo era algo parecido com

ADOCommand1.Execute

SELECT * FROM TableMaster local

INSERT INTO TableMaster Rede

('Where numeracao LIKE ''%'+Edit1.text+'%'' ')

o mesmo para (N)registos relacionados com a tabelaMaster...

SELECT * FROM DetailTable local

INSERT INTO DetailTable Rede

('Where numeracao_sub LIKE ''%'+Edit1.text+'%'' ')

sera que tem lógica?

Link para o comentário
Compartilhar em outros sites

  • 0

Tenta com ADOQuery,

ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT * FROM TableMaster local');
ADOQuery1.SQL.Add('INSERT INTO TableMaster Rede');
ADOQuery1.SQL.Add('Where numeracao LIKE %'+ Edit1.text + '%');
ADOQuery1.ExecSQL;

ADOQuery2.Close;
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Add('SELECT * FROM DetailTable local');
ADOQuery2.SQL.Add('INSERT INTO DetailTable Rede');
ADOQuery2.SQL.Add('Where numeracao_sub LIKE %' + Edit1.text + '%');
ADOQuery2.ExecSQL;

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Obrigado amigo

mas a ADOQuery1 so pode receber de de uma conecção frmDados.Conection e eu tenho 2 (frmDados.Conection Rede + Cenecao_casa) ele não esta aceitando existe algo de errado no codigo????

Obrigado

begin

with ADOTable_casa do //Laço de consulta por codigo

Begin

ADOQuery1.Close;

ADOQuery1.SQL.Clear;

SQL.Add('SELECT * FROM FROM ADOTable_casa');

ADOQuery1.SQL.Add('INSERT INTO ADOQuery1.SubTRelFinal_sub');

ADOQuery1.SQL.Add('Where numeracao LIKE %'+ NInterv.text + '%');

ADOQuery1.ExecSQL;

Tenta com ADOQuery,

ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT * FROM TableMaster local');
ADOQuery1.SQL.Add('INSERT INTO TableMaster Rede');
ADOQuery1.SQL.Add('Where numeracao LIKE %'+ Edit1.text + '%');
ADOQuery1.ExecSQL;

ADOQuery2.Close;
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Add('SELECT * FROM DetailTable local');
ADOQuery2.SQL.Add('INSERT INTO DetailTable Rede');
ADOQuery2.SQL.Add('Where numeracao_sub LIKE %' + Edit1.text + '%');
ADOQuery2.ExecSQL;

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Puxa amigo, vou dar uma pesquisa pra você prometo, eu nunca fiz esse tipo de operação, além de não ter experiencia com Access, mas tenho certeza que logo alguém responde esse tópico te ajudando... se eu conseguir alguma coisa posto aqui pra vc!

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0
mas a ADOQuery1 so pode receber de de uma conecção frmDados.Conection e eu tenho 2 (frmDados.Conection Rede + Conexão_casa) ele não esta aceitando existe algo de errado no codigo????

Se eu entendi direito, voce quer atualizar os dados de uma tabela que esta no seu micro, com uma tabela que está no servidor ( internet ) ... é isso ?

se for isso o banco de dados que voce deve usar seria o MySql

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Uma pergunta !!

com o codigo encontrado aqui sera e possivel copiar entre quantas tabelas! ou onde estou errando!!!!!!!!!

Tabela 1 Table 2

1 1 // Registos selacionados a copiar

2 2

3

Tabelasdetail

Tabela 3 Table 4

23 23 // Registos selacionados a copiar

2 4 24

25

procedure TForm1.Button1Click(Sender: TObject);

var

i,j: integer;

NomeCampo: String;

ii,jj: integer;

NomeCampo1: String;

begin

Tabela1.First;

For j := 1 to Tabela1.RecordCount do

Begin

Tabela2.First;

For i := 1 To Tabela2.RecordCount Do

Begin

If (Tabela1Sigla.Value = Tabela2Sigla.Value) and (Tabela1Numero.Value = Tabela2Numero.Value)

and (Tabela1Codoco.Value <> Tabela2Codoco.Value) then

begin

Tabela1.Edit;

Tabela1Codoco.Value := Tabela2Codoco.Value;

Tabela1.Post;

end;

Tabela2.Next;

End;

Tabela1.Next;

end;

//iniciar a inserção na TabelaDetail(3)

Tabela1.First;

For jj := 1 to Tabela1.RecordCount do

Begin

Tabela2.First;

For ii := 1 To Tabela2.RecordCount Do

Begin

If (Tabela3Sigla.Value = Tabela4Sigla.Value) and (Tabela3Numero.Value = Tabela4Numero.Value)

and (Tabela3Codoco.Value <> Tabela4Codoco.Value) then

begin

Tabela3.Edit;

Tabela3Codoco.Value := Tabela2Codoco.Value;

Tabela3.Post;

end;

Tabela4.Next;

End;

Tabela1.Next;

end;

Link para o comentário
Compartilhar em outros sites

  • 0

Voce não respondeu a minha pergunta.... sem isso não posso lhe dizer como fazer

com relação a esse código , ele só serve se as tabelas forem pequenas, com poucos registros ( 1000 a 3000 registros )

para tabelas maiores, a abordagem deve ser outra, senão o sistema fica lento e não seria a maneira correta de fazer essa atualização.

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Quanto a usar o MySql não seria pior mas ai melhor usar bases dados .GBD ou algo do genero .

Depois existe sempre a necessidade de instalar algum componente e fica dificil na empresa instalar sooftware ( esta base de dados efectua varios calculos em outras areas e não necessita instalação previa e trabalha em rede e local )

Assim

Tabelamestre(Local_deste_cliente) (1 registo a actualizar da tabela 2 para a tabela 1)

Tabeladetail (equipamentos_neste_local) ((i) registos a actualizar da tabela 4 para a tabela 3)

:

:

* Tabeladetail_1 (Variaveis_neste_local). ((J) registos a actualizar da tabela 6 para a tabela5)

Agora devolver as tabelas seleccionadas a devolver a base de dados a que esta ruim...

var

fileSource, fileDest: string;

Fo : TSHFileOpStruct;

buffer : array[0..4096] of char;

p : pchar;

dirFile0: String;

dirFile01: String;

dirFile10: String;

begin

dirFile0 := (Dirlocal + 'Vibrometria\'+ClienteN.text+'\'+NInterv.text) ;

dirFile01 := (localAplicação+ 'Vibrometria\'+ClienteN.text+'\' ) ;

if ForceDirectories(dirFile01) then

dirFile10:= localAplicação+'Vibrometria\';

if ForceDirectories(dirFile10) then

if MessageBox(Handle,'vai eliminar base de dados neste computador ?' ,'Importante',mb_IconInformation + mb_YesNo) = mrYes Then

Begin

try

if MessageBox(Handle,'Vai levar para casa Base dados??','Importante',mb_IconInformation + mb_YesNo) = mrYes Then

if DirectoryExists(localAplicação+'db') then

fileSource:= Dirlocal+'db\'+'base_dados.mdb';

fileDest:= (localAplicação+'db\'+'base_dados.mdb');

CopyFile(PChar(fileSource), PChar(fileDest), false);

MessageBox(Handle,'não esqueça de Devolver??','Importante',mb_IconInformation ) ;

DSub_TRelFinal.AutoEdit:= true;

Sub_TRelFinal.edit;

Sub_TRelFinal.FieldByName('OBS4').AsString := 'Fora da Base dados';

Sub_TRelFinal.post;

finally

FillChar(Buffer, sizeof(Buffer), #0);

p := @buffer;

StrECopy(p, PChar(dirFile0)); //copia a pasta

FillChar(Fo, sizeof(Fo), #0);

Fo.Wnd := Application.Handle;

Fo.wFunc := FO_COPY;

Fo.pFrom := @Buffer;

Fo.pTo := PChar(dirFile01); //destino da pasta

Fo.fFlags := 0;

if ((SHFileOperation(Fo) <> 0) or (Fo.fAnyOperationsAborted <> false)) then

ShowMessage('File copy process cancelled')

end;

end;

Voce não respondeu a minha pergunta.... sem isso não posso lhe dizer como fazer

com relação a esse código , ele só serve se as tabelas forem pequenas, com poucos registros ( 1000 a 3000 registros )

para tabelas maiores, a abordagem deve ser outra, senão o sistema fica lento e não seria a maneira correta de fazer essa atualização.

abraço

Editado por rebotea
Link para o comentário
Compartilhar em outros sites

  • 0
( esta base de dados efectua varios calculos em outras areas e não necessita instalação previa e trabalha em rede e local )

Veja que se esta atualização de tabelas fosse de um micro para um servidor na internet, o ideal seria usar o banco MyQls porque é nativo do proprio servidor

Se essa atualização é numa rede interna, então a atualização de 1 para N entre as tabelas pode ser feita usando parametros.

usando o seu próprio exemplo:

Tabeladetail_1 (Variaveis_neste_local). ((J) registos a actualizar da tabela 6 para a tabela5)

Neste caso voce faz uma varredura através de um For na tabela 6, e na tabela 5 voce usará parametros em uma clausula SQL ( select ) onde passará os parametros de pesquisa da tabela 6.

exemplo

Select * from Tabela5 where Tabela6Campo1 = 'valor do campo1' and Tabela6Campo2 = 'valor do campo2'

Ou seja a cada registro lido na Tabela6, será procurado o respectivo registro na Tabela5 e o mesmo será atualizado.

Desta maneira voce diminui o trafego da rede e agiliza o processo

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

como passaria a consulta já que para abrir o registo local estou a fazer da seguinte maneira:

//QueryADOTable_casa

// onde pego o registo mestre antes de abrir da tabela remota (NInterv.text:=DBedit1.text)

Begin

with ADOTable_casa do //Laço de consulta por codigo

Begin

Close;

SQL.Clear;

SQL.Add('SELECT * from Vibrometria_Sub');

SQL.Add('Where numeracao LIKE ''%'+NInterv.text);// Pego o registo Actuall da Base de dados da Network

Open;

end;

end

como poderei subestituir o codigo acima para inserir os valores de uma tabela para a outra dinamicamenta..

SubTRelFinal_sub <= QueryADOTable_casa (i)

Select * from Tabela3 where Tabela4Campo1 = 'valor do campo1' and Tabela4Campo2 = 'valor do campo2' !!!!!!!!

em seguida actualizar a tabela tendo como base os registos mestres da tabela acima

SubTRelFinal_sub_sub <= QueryADOTable_casa_sub (i)

Select * from Tabela5 where Tabela6Campo1 = 'valor do campo1' and Tabela6Campo2 = 'valor do campo2'

esta dificil chegar lá

mas obrigado pela ajuda que estão dando

Link para o comentário
Compartilhar em outros sites

  • 0

rebotea ... favor se expressar melhor, pois esta dificil entender o que quer

veja: voce colocou esta frase

como passaria a consulta já que para abrir o registo local estou a fazer da seguinte maneira:

e depois esta:

Pego o registro Actuall da Base de dados da Network

Isso significa que voce tem uma tabela local no seu micro e voce quer atualizar uma tabela que está em um provedor da internet

responda se é isso ?

Link para o comentário
Compartilhar em outros sites

  • 0

desculpe se estou dificil de me expressar

O que necessito efectuar e:

Inserir no registo selecionado atreves do Adoquery,TableChield,Tablechield1 inserir os dados no Table1,TableChield_1,TableChield_2

SQL.Clear;

SQL.Add('SELECT * from ADoquery');

SQL.Add('Where numeracao LIKE ''%'+NInterv.text);// Localizo o registo actual da tabela Table1 que contem 1 registo(NInterv.text)

Open;

end;

// Em seguida desejo actualizar os registos da tabela (table1 )

table1 <= ADoquery

e actualizar os registos filhos das tabelas

TableChield <= TableChield_1 (n registos relacionados na table1 )

TableChield1 <= TableChield_2 ((n*N registos relacionas na TableChield )

Sera que foi explicito!!!!!!

Agradeçiddo pela paciencia

Editado por rebotea
Link para o comentário
Compartilhar em outros sites

  • 0

Da mesma forma que voce usou um Select para encontrar o registro atual da Table1, voce deve fazer a mesma coisa para localizar os registros TableChield e da TableChield1.

depois usando um comando For para as respectivas tabelas voce consegue atualizar esses registros

Para entender melhor esse conceito leia este artigo:

http://www.scribd.com/doc/8451141/banco-dados-com-delphi

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Obrigado

mas se poder dar uma ajuda suplementar agradeçido não estou conseguindo colocar o codigo a funcionar.

//iniciar inserção registos subsub

ADOTable_casa_sub_1.First;

while not ADOTable_casa_sub_1.Eof do begin

SubTRelFinal_sub.First;

while not SubTRelFinal_sub.Eof do begin

ADOTable_casa_sub_Sub.First;

while not ADOTable_casa_sub_Sub.Eof do begin

SubTRelFinal_sub.Edit;

SubTRelFinal_sub.FieldByName('Foto1').text := ADOTable_casa_sub_Sub.FieldByName('Foto1').text;

SubTRelFinal_sub.FieldByName('Foto2').text := ADOTable_casa_sub_Sub.FieldByName('Foto2').text;

SubTRelFinal_sub.FieldByName('Analisefoto1').text := ADOTable_casa_sub_Sub.FieldByName('Analisefoto1').text;

SubTRelFinal_sub.FieldByName('Observações').text := ADOTable_casa_sub_Sub.FieldByName('Observações').text;;

SubTRelFinal_sub.FieldByName('ContractoN').text := ADOTable_casa_sub_Sub.FieldByName('ContractoN').text;

SubTRelFinal_sub.FieldByName('OBS3').text := ADOTable_casa_sub_Sub.FieldByName('OBS3').text;

SubTRelFinal_sub.FieldByName('OBS4').text := ADOTable_casa_sub_Sub.FieldByName('OBS4').text;

SubTRelFinal_sub.FieldByName('OBS2').text := ADOTable_casa_sub_Sub.FieldByName('OBS2').text;

SubTRelFinal_sub.FieldByName('OBS1').text := ADOTable_casa_sub_Sub.FieldByName('OBS1').text;

SubTRelFinal_sub.FieldByName('Localização').text := ADOTable_casa_sub_Sub.FieldByName('Localização').text;

SubTRelFinal_sub.FieldByName('Tipo_equipamento').text:= ADOTable_casa_sub_Sub.FieldByName('Tipo_equipamento').text;

SubTRelFinal_sub.FieldByName('Analisefoto101').text:= ADOTable_casa_sub_Sub.FieldByName('Analisefoto101').text;

SubTRelFinal_sub.FieldByName('Analisefoto201').text := ADOTable_casa_sub_Sub.FieldByName('Analisefoto201').text;

SubTRelFinal_sub.FieldByName('GrauAnomalia').text := ADOTable_casa_sub_Sub.FieldByName('GrauAnomalia').text;

SubTRelFinal_sub.Post;

End;

SubTRelFinal_sub.Next;

end;

ADOTable_casa_sub_Sub.Next;

end;

ADOTable_casa_sub_1.Next;

end;

end;

Link para o comentário
Compartilhar em outros sites

  • 0

Boas amigos

da forma abaixo consigo actualizar a tabelaChield mas caso preciso inserir algum registo não e possivel existe alguma forma de o fazer!!!!!!!!!!!!!

Brigado

Sub_TRelFinal_1.First;

ADOTable_casa_sub_1.First;

while not ADOTable_casa_sub_1.Eof do begin

begin

Sub_TRelFinal_1.Edit;

Sub_TRelFinal_1.FieldByName('localizacao_eq').text:= ADOTable_casa_sub_1.FieldByName('localizacao_eq').text;

Sub_TRelFinal_1.FieldByName('Equipamento').text:= ADOTable_casa_sub_1.FieldByName('Equipamento').text;

Sub_TRelFinal_1.FieldByName('tipo_equip').text := ADOTable_casa_sub_1.FieldByName('tipo_equip').text;

Sub_TRelFinal_1.Post;

End;

//......................................................................

SubTRelFinal_sub.First;

ADOTable_casa_sub_Sub.First;

while not ADOTable_casa_sub_Sub.Eof do begin

begin

SubTRelFinal_sub.Edit;

SubTRelFinal_sub.FieldByName('Foto1').text := ADOTable_casa_sub_Sub.FieldByName('Foto1').text;

SubTRelFinal_sub.FieldByName('Foto2').text := ADOTable_casa_sub_Sub.FieldByName('Foto2').text;

SubTRelFinal_sub.Post;

End;

ADOTable_casa_sub_Sub.Next;

SubTRelFinal_sub.Next;

end;

//......................................................................

ADOTable_casa_sub_1.Next;

Sub_TRelFinal_1 .Next;

end;

end;

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      651,9k
×
×
  • Criar Novo...