rebotea Postado Abril 8, 2010 Denunciar Share Postado Abril 8, 2010 (editado) Como poderei actualizar dados existentes na tabelas2 para a tabelas1 com TADOCommand a que esta muito dificil..TableMaster(metria_Sub_Sub)numeracao_sub long AUTOnumeracao long Foto1 text(50) Foto2 text(50) Analisefoto1 text(50) Observações memo YObra text(250) Designação_equipamento text(250)DetailTablenumeracao_sub_EQ long AUTOnumeracao_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 localCenecao_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 Abril 8, 2010 por rebotea Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Douglas Soares Postado Abril 8, 2010 Denunciar Share Postado Abril 8, 2010 Veja esse post:http://scriptbrasil.com.br/forum/index.php?showtopic=148302Abraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 rebotea Postado Abril 8, 2010 Autor Denunciar Share Postado Abril 8, 2010 Veja esse post:http://scriptbrasil.com.br/forum/index.php?showtopic=148302Abraçose isso ai mas o que eu desejava mesmo era algo parecido comADOCommand1.ExecuteSELECT * FROM TableMaster localINSERT INTO TableMaster Rede('Where numeracao LIKE ''%'+Edit1.text+'%'' ')o mesmo para (N)registos relacionados com a tabelaMaster...SELECT * FROM DetailTable localINSERT INTO DetailTable Rede('Where numeracao_sub LIKE ''%'+Edit1.text+'%'' ')sera que tem lógica? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Douglas Soares Postado Abril 9, 2010 Denunciar Share Postado Abril 9, 2010 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 rebotea Postado Abril 9, 2010 Autor Denunciar Share Postado Abril 9, 2010 Obrigado amigomas 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????Obrigadobeginwith ADOTable_casa do //Laço de consulta por codigo BeginADOQuery1.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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Douglas Soares Postado Abril 9, 2010 Denunciar Share Postado Abril 9, 2010 Qual o seu banco de dados? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 rebotea Postado Abril 9, 2010 Autor Denunciar Share Postado Abril 9, 2010 estou usando mdb.Obrigado Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Douglas Soares Postado Abril 10, 2010 Denunciar Share Postado Abril 10, 2010 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 rebotea Postado Abril 10, 2010 Autor Denunciar Share Postado Abril 10, 2010 (editado) será melhor mudar de base de dados!!!!!!!!!!!! A que esta difícil chegar a uma solução final para actualizar correctamente http://yfrog.com/j5relacjObrigadoObrigado Editado Abril 11, 2010 por Douglas_Soares Correção de Link Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Abril 12, 2010 Denunciar Share Postado Abril 12, 2010 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 MySqlabraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 rebotea Postado Abril 12, 2010 Autor Denunciar Share Postado Abril 12, 2010 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 3TabelasdetailTabela 3 Table 4 23 23 // Registos selacionados a copiar 2 4 24 25procedure 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; Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Abril 12, 2010 Denunciar Share Postado Abril 12, 2010 Voce não respondeu a minha pergunta.... sem isso não posso lhe dizer como fazercom 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 rebotea Postado Abril 13, 2010 Autor Denunciar Share Postado Abril 13, 2010 (editado) 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;begindirFile0 := (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 Begintryif MessageBox(Handle,'Vai levar para casa Base dados??','Importante',mb_IconInformation + mb_YesNo) = mrYes Thenif 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 fazercom 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 Abril 13, 2010 por rebotea Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Abril 13, 2010 Denunciar Share Postado Abril 13, 2010 ( 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 servidorSe 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 rebotea Postado Abril 13, 2010 Autor Denunciar Share Postado Abril 13, 2010 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; endcomo 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 acimaSubTRelFinal_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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Abril 14, 2010 Denunciar Share Postado Abril 14, 2010 rebotea ... favor se expressar melhor, pois esta dificil entender o que querveja: voce colocou esta frasecomo 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 internetresponda se é isso ? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 rebotea Postado Abril 15, 2010 Autor Denunciar Share Postado Abril 15, 2010 (editado) desculpe se estou dificil de me expressarO que necessito efectuar e:Inserir no registo selecionado atreves do Adoquery,TableChield,Tablechield1 inserir os dados no Table1,TableChield_1,TableChield_2SQL.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 Abril 15, 2010 por rebotea Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Abril 17, 2010 Denunciar Share Postado Abril 17, 2010 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 registrosPara entender melhor esse conceito leia este artigo: http://www.scribd.com/doc/8451141/banco-dados-com-delphiabraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 rebotea Postado Abril 18, 2010 Autor Denunciar Share Postado Abril 18, 2010 Obrigadomas 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 beginADOTable_casa_sub_Sub.First;while not ADOTable_casa_sub_Sub.Eof do beginSubTRelFinal_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; Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 rebotea Postado Abril 18, 2010 Autor Denunciar Share Postado Abril 18, 2010 Boas amigosda 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 beginbeginSub_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 beginbeginSubTRelFinal_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; Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
rebotea
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 reboteaLink para o comentário
Compartilhar em outros sites
19 respostass a esta questão
Posts Recomendados
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.