Ir para conteúdo
Fórum Script Brasil

rebotea

Membros
  • Total de itens

    79
  • Registro em

  • Última visita

Tudo que rebotea postou

  1. 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,
  2. 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;
  3. 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;
  4. 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
  5. 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;
  6. 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
  7. 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
  8. 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)
  9. 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;
  10. 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;
  11. 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;
  12. 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
  13. 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
  14. 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;
  15. 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;
  16. 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
  17. 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;
  18. 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?
  19. 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)
  20. 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 .
  21. 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
  22. 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
  23. 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;
  24. 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
×
×
  • Criar Novo...