
rebotea
Membros-
Total de itens
79 -
Registro em
-
Última visita
Tudo que rebotea postou
-
se ele não conseguir ligar ao banco dados vBanco := Trim(IniFileName.ReadString('acesso','BancoRemto','')); Dirlocal := Trim(IniFileName.ReadString('acesso','PastasRemto','')); não procura o banco de dados local vBanco := Trim(IniFileName.ReadString('acesso','banco','')); Dirlocal := Trim(IniFileName.ReadString('acesso','PastasLocais','')); obrigado,
-
como conectar-se remotamente e se não for encontrado o caminho conetar-se localmente.. estou tentando mas esta dando erro.. Obrigado. Inifile..... [acesso] banco=H\c:\controlo\db\base_dados.mdb PastasLocais=H\c:\controlo\ BancoRemto=D:\Prog gestão\db\base_dados.mdb PastasRemto=D:\Prog gestão\ vBanco : String; IniFileName : TIniFile; begin IniFileName := TIniFile.Create(ExtractFilePath(ParamStr(0))+FileName); Try vBanco := Trim(IniFileName.ReadString('acesso','BancoRemto','')); Dirlocal := Trim(IniFileName.ReadString('acesso','PastasRemto','')); frmPrincipal.Edit1.text := Dirlocal ; Dirtrabalho := (ExtractFilePath(Application.ExeName)); // Aqui necessitava que caso não fosse encontrado o caminho"BancoRemto" ele se conecta-se ao local"banco" except IniFileName := TIniFile.Create(ExtractFilePath(ParamStr(0))+FileName); Try vBanco := Trim(IniFileName.ReadString('acesso','banco','')); Dirlocal := Trim(IniFileName.ReadString('acesso','PastasLocais','')); frmPrincipal.Edit1.text := Dirlocal ; Dirtrabalho := (ExtractFilePath(Application.ExeName)); Finally end; IniFileName.Free; end; Conection.ConnectionString := vBanco; end;
-
Olá amigos Como poderei atualizar duas tabelas iguais rapidamente! O codigo abaixo esta muito lento tem mais ou menos 3000 registos agora. Obrigado while not frmDados.Planeamento_remot.Eof do begin begin frmDados.Planeamento_Local.Edit; frmDados.Planeamento_Local.FieldByName('Duração').text := frmDados.Planeamento_remot.FieldByName('Duração').text; frmDados.Planeamento_Local.FieldByName('Afazeres1').text := frmDados.Planeamento_remot.FieldByName('Afazeres1').text; frmDados.Planeamento_Local.FieldByName('Afazeres2').text := frmDados.Planeamento_remot.FieldByName('Afazeres2').text; frmDados.Planeamento_Local.FieldByName('obs').text := frmDados.Planeamento_remot.FieldByName('obs').text; frmDados.Planeamento_Local.FieldByName('Entrega Relatorio').text := frmDados.Planeamento_remot.FieldByName('Entrega Relatorio').text; frmDados.Planeamento_Local.FieldByName('Entrega Relatorio1').text := frmDados.Planeamento_remot.FieldByName('Entrega Relatorio1').text; frmDados.Planeamento_Local.FieldByName('entregue a:').text := frmDados.Planeamento_remot.FieldByName('entregue a:').text; frmDados.Planeamento_Local.FieldByName('Entrega Relatorio').text := frmDados.Planeamento_remot.FieldByName('Entrega Relatorio').text; frmDados.Planeamento_Local.Post; End;
-
Amigos tenho uma duvida já algum tempo: E possivel usar 2 TAdoQuery (master& detail) em vez de uma TadoQuery + TadoTable? como se faz caso possivel ,já que a minha master table tem 3 campos ( 1 campo Autoinc + Ano +mes) Detail (tem o campo Autoinc + Ano +..+..) Obrigado
-
(Resolvido) contar dias do Ano e inserir mes e dia da semana
pergunta respondeu ao rebotea de rebotea em Delphi, Kylix
Consegui com o codigo abaixo agora o problema esta tenho uma adoquery que me tem os anos e uma tabela Detail que tem os campos diasAno,etc. mas não esta indexando conforme foi escrito na base dados porque! Obrigado Var I, X : Integer; Data : TDateTime; DiaAno, Mes, DiaMes, DiaSemana : TStringList; begin inherited; Year:=StrToInt(ano.Text); I := DaysInAYear(Year); Data := EncodeDate(Year, 01, 01); DiaAno := TStringList.Create; Mes := TStringList.Create; DiaMes := TStringList.Create; DiaSemana := TStringList.Create; for X := 1 to I -1+1 do begin DiaAno.Add(IntToStr(X)); Mes.Add(FormatDateTime('mmmm',Data)); DiaMes.Add(IntTostr(DayOfTheMonth(Data))); DiaSemana.Add(FormatDateTime('dddd',Data)); Data := Data + 1; end; for I := 0 to DiaAno.Count -1 do begin Planeamento.Append; Planeamento.FieldByName('numerodiasAno').value:=DiaAno.Strings; Planeamento.FieldByName('mes').value:=Mes.Strings; Planeamento.FieldByName('dia_mes').value:=DiaMes.Strings; Planeamento.FieldByName('dia_semana').value:=DiaSemana.Strings; end; FreeAndNil(DiaAno); FreeAndNil(Mes); FreeAndNil(DiaMes); FreeAndNil(DiaSemana); end; -
(Resolvido) contar dias do Ano e inserir mes e dia da semana
pergunta respondeu ao rebotea de rebotea em Delphi, Kylix
Obrigado Essa parte ai tudo bem mas como poderei inserir os dados relacionados nos respectivos registos! com numero de dia de 1....365 e de janeiro a Dezembro com o dia da semana.. segunda a domingo.. como poderei fazer tipo abaixo!!!!!!!!!! procedure TPlaneamento.Button1Click(Sender: TObject); var x: Integer; var Y: Integer; var i: Integer; begin inherited; Year:=StrToInt(ano.Text); diasano.Text:= IntToStr( DaysInAYear(Year) ); i =(FormatDateTime('dddd',Now)); j =(IntToStr( DaysInAMonth(Year,Month))); frmDados.Planeamento.First; for x := 1 to (diasano.value-1 ) do frmDados.Planeamento.Append; DBNumberEditEh1 .value:=X; frmDados.Planeamento.edit; frmDados.Planeamento.FieldByName('numerodiasAno').value:= x ; frmDados.Planeamento.FieldByName('dia_mes').value:= j ; frmDados.Planeamento.FieldByName('dia_extenso').value:= i; frmDados.Planeamento.post; frmDados.Planeamento.next; end; Obrigado -
(Resolvido) contar dias do Ano e inserir mes e dia da semana
uma questão postou rebotea Delphi, Kylix
Boas amigos estou tentando fazer um sistema que onde insiro o Ano e Obtenho a quantidade de dias que esse ano tem e desejava em seguida inserir na base de dados esse numero de dias na tabela/coluna.Dias_ano(registo 1....365) Year:=StrToInt(ano.Text); diasano.Text:= IntToStr( DaysInAYear(Year) ); ao mesmo tempo na coluna Ano_Mes adiciona o mes "imaginamos o mes de janeiro que são os primeiros 31 dias" por sua vez na coluna dias da semana informa por extenso . diasAno| Mes |diames |dia semana | 1 | janeiro | 1 |Segunda | 2 | janeiro | 2 | Terça | ......................................................................................... 365 | Dezembro | 31 | Segunda | Obrigado -
Brigado o erro ocorre sempre nestas partes Analise2.value := Copy(sp2nome , Length(sp2nome ) - 4 , 7); ValorGeral.Value:= trim(Analise1.Value-Analise2.Value ) ; em virtude de eu tentar pegar so o valor de : sp01.temp 18 que pode ser ( sp01.temp 18,8)
-
olá estou tendo este erro e não consigo resolver que estou fazendo de errado! Obrigado Could not convert variant of type (UnicodeString) into type (Double) dados a ler sp01.temp 18 sp02.temp 25 Code procedure TTermografia.AnileseSpClick(Sender: TObject); var v1, v2,v3: String; I, J: Integer; sp1nome : String; sp2nome : String; begin try label1.Caption:= trim(IRimage1.AnalysisResults('Sp01')); Pontovalor1.text:= trim(IRimage1.AnalysisResults('Sp01.temp')); label2.Caption:= trim(IRimage1.AnalysisResults('Sp02')); Pontovalor2.Text:= trim(IRimage1.AnalysisResults('Sp02.temp')); begin if (Pontovalor2.Text <> ' ') then try sp1nome := trim(IRimage1.AnalysisResults('Sp01.temp')); Analise1.value := Copy(sp1nome , Length(sp1nome ) - 4 , 7); sp2nome := trim(IRimage1.AnalysisResults('Sp02.temp')); Analise2.value := Copy(sp2nome , Length(sp2nome ) - 4 , 7); ValorGeral.Value:= trim(Analise1.Value-Analise2.Value ) ; ValorGeral.Value := RoundTo(ValorGeral.Value, -2); finally end; end; except sp1nome := trim(IRimage1.AnalysisResults('Sp01.temp')); Analise1.value := Copy(sp1nome , Length(sp1nome ) - 3 , 4); sp2nome := trim(IRimage1.AnalysisResults('Sp02.temp')); Analise2.value := Copy(sp2nome , Length(sp2nome ) - 3, 4); ValorGeral.Value:= trim(Analise1.Value-Analise2.Value ) ; ValorGeral.Value := RoundTo(ValorGeral.Value, -2); end; end;
-
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;
-
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;
-
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
-
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
-
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;
-
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;
-
será melhor mudar de base de dados!!!!!!!!!!!! A que esta difícil chegar a uma solução final para actualizar correctamente http://yfrog.com/j5relacj Obrigado Obrigado
-
estou usando mdb. Obrigado
-
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;
-
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?
-
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)
-
Veja como funciona o relacionamento de 1 para N em tabelas http://3.bp.blogspot.com/_buFzmAtZPuc/SUby...tegoriasDER.gif O relacionamento demonstrado acima indica que uma “Categoria” pode classificar muitos produtos. Sendo que o “Produto” somente pode ser classificado por uma “Categoria”. Este tipo de relacionamento chama-se “Um para N” (1-N). No relacionamento “Um para N” a chave (campo de relacionamento) aponta para a tabela “N”, no caso “Produtos”. Isso quer dizer que na tabela Producs, existe uma coluna que referencia a tabela “Categories”. Em outras palavras: A coluna “CategoryID”, de “Producs” aponta para a “CategoryID” de “Categories”. Veja a partir da pagina 7 dessa apostila http://www.fema.com.br/~schiavo/files/Apos...D5_Modulo03.pdf Outros http://www.ramosdainformatica.com.br/art_r...s01.php?CDA=853 abraço Obrigado mas meu problema e sempre ao duplicar os muitos de uma tebela indexada1 para muitos .
-
mas a minha necessidade prende-se com: Imaginando seu quadro carro que tem N equipamentos quendo vai a revisão faz um cheklist esse cheklist fica guardado para ano , no ano seguinte pega o chekliste retira as variaveis e data ele e já esta pronto a utilizar.. obrigado
-
o seu código está bom ....mas existem maneiras melhores ( menos código ) , mas com a experiência voce vai aprender abraço Acredito que sim.. Obrigado Mas uma coisa e certa fica dificil duplicar registos em escada 1 para muitos 1| Tabela mestre || Filho ||| Sub |||||||||||||||||||||||||||||| SUBB a que ate agora so consegui duplicar ate a tabela filho .. Sera que existe algum segrede para duplicar os dados automaticamente apartir da Tabela Meste até a SUBB ???? ou sou novo demais para perceber como poderei fazer isso!!!! se alguém tiver uma dica\codigo Agradeçido. Rebotea@gmail.com
-
claro que existe uma forma mais simples, voce é que esta querendo fazer do jeito mais dificil ..rs atribua os valores dos campos a variaveis depois voce joga de volta os valores das variaveis aos campos novamente exemplo depois voce faz o inverso abraço o que achei mais facil de fazer foi : Pego os dados da tabela Mastre e duplico os mesmos, ao mesmo tempo faço uma consulta do registro filho que tem N registros do mestre e passao eles da de um dbgrid de tabela consulta para o destino depois de inserir o mestre. Axa que fica bem assim!!!!!!!!!!!!!!! var i: Integer; j: Integer; begin ShowMessage('Vai Adicionar nova visita a "'+cxDBTextEdit5.Text+'..........' +obra.Text); Edit_consultaCop.Text:=NInterv.Text; // Duplica as informações do registro atual DSub_TRelFinal.AutoEdit:= true; DuplicaRegistroDataSet(Sub_TRelFinal, Sub_TRelFinal.RecNo, ['numeracao','Conclusoes','data_relatorio','Observações','Data_Proxima_visita']); Sub_TRelFinal.FieldByName('Data_VisitaLocal').AsString := defnidata.Text; Sub_TRelFinal.Post ; // Duplicar registo Sub DBcopiar.SelectedRows.SelectAll; if DBcopiar.SelectedRows.Count in [0..1] then begin DBdestino.DataSource.DataSet.Append; for j := 0 to DBcopiar.FieldCount - 1 do begin DBdestino.DataSource.DataSet.Edit; DBdestino.Fields[j].Value := DBcopiar.Fields[j].Value; end; DBdestino.DataSource.DataSet.Post; begin //elimina na tabela origem ao copiar //DBcopiar.DataSource.DataSet.Delete; end; end else if DBcopiar.SelectedRows.Count>1 then begin for i := 0 to DBcopiar.SelectedRows.Count - 1 do begin DBcopiar.DataSource.DataSet.GotoBookmark(Pointer(DBcopiar.SelectedRows)); DBdestino.DataSource.DataSet.Append; for j := 0 to DBcopiar.FieldCount - 1 do begin DBdestino.DataSource.DataSet.Edit; DBdestino.Fields[j].Value := DBcopiar.Fields[j].Value; end; DBdestino.DataSource.DataSet.Post; begin //elimina na tabela origem ao Copiar //DBcopiar.DataSource.DataSet.Delete; end; end; end; Q_SubTRelFinal_sub.Close; ShowMessage('A nova Visita fica para "'+Obra.Text+'.........' +DBDateTimeEditEh3.Text); end; //para duplicar o registro Mestre procedure DuplicaRegistroDataSet( dataSet: TDataSet; recNo: integer; camposIgnorar: array of string); function IgnorarCampo(campo: string): boolean; var i: integer; begin Result := false; for i := 0 to Length(camposIgnorar) - 1 do begin if (camposIgnorar = campo) then begin Result := true; Break; end; end; end; var valores: Variant; i: integer; readOnly: boolean; begin // Duplica o registro "recNo" de um dataset dataSet.RecNo := recNo; valores := VarArrayCreate([0, dataSet.FieldCount - 1], VarVariant); for i := 0 to (dataSet.FieldCount - 1) do valores := dataSet.Fields.Value; dataSet.Append; for i := 0 to (dataSet.FieldCount - 1) do begin if (not(IgnorarCampo(dataSet.Fields.FieldName))) then begin readOnly := dataSet.Fields.ReadOnly; dataSet.Fields.ReadOnly := false; dataSet.Fields.Value := valores; dataSet.Fields.ReadOnly := readOnly; end; end; end;
-
Basta fazer o processo inverso ... mas porque há a necessidade de fazer isso ? abraço Para replicar os valores após inserir mais um registro Mestre! ou existe alguma forma mais simples? Obrigadro