Ir para conteúdo
Fórum Script Brasil

Alberto Mota

Membros
  • Total de itens

    296
  • Registro em

  • Última visita

Tudo que Alberto Mota postou

  1. Adapte o código abaixo. Voce pode usar um AdoTable ou um AdoQuery procedure TFrmFiltroPeriodo.BitBtn2Click(Sender: TObject); var dt_ini, dt_fin: String; pasta : Variant; Linha : Integer; Begin dt_ini:=DateToStr(DateTimePicker1.Date); dt_fin:=DateToStr(DateTimePicker2.Date); edit1.Text := dt_ini; edit2.Text := dt_fin; begin ADOStoredProc1.close; ADOStoredProc1.Parameters.ParamByName('@datai').Value := dt_ini; ADOStoredProc1.Parameters.ParamByName('@dataf').Value := dt_fin; begin inherited; ADOStoredProc1.Filtered := true; ADOStoredProc1.open; ADOStoredProc1.active := true; Linha :=2; Pasta := CreateOleObject('Excel.Application'); Pasta.WorkBooks.add(1); Pasta.Caption := 'Vendas'; Pasta.Visible := False; Pasta.Cells[1,1] := 'Data'; Pasta.Cells[1,2] := 'Cod. C.'; Pasta.Cells[1,3] := 'Nome do Cliente'; Pasta.Cells[1,4] := 'Cidade'; Pasta.Cells[1,5] := 'UF'; Pasta.Cells[1,6] := 'Nº Vda'; Pasta.Cells[1,7] := 'Descrição do Produto'; Pasta.Cells[1,8] := 'Unidade'; Pasta.Cells[1,9] := 'Qtde'; Pasta.Cells[1,10] := 'Valor'; Pasta.Cells[1,11] := 'Total'; Pasta.Cells[1,12] := 'Condições'; ADOStoredProc1.DisableControls; try While not ADOStoredProc1.Eof do begin Pasta.Cells[Linha,1]:= ADOStoredProc1dt.Value; Pasta.Cells[linha,2] := ADOStoredProc1Cliente.Value; Pasta.Cells[Linha,3] := ADOStoredProc1ClienteNome.Value; Pasta.Cells[Linha,4] := ADOStoredProc1Cidade.Value; Pasta.Cells[Linha,5] := ADOStoredProc1UF.Value; Pasta.Cells[Linha,6] := ADOStoredProc1codvda.Value; Pasta.Cells[Linha,7] := ADOStoredProc1descricao.Value; Pasta.Cells[Linha,8] := ADOStoredProc1Unidade.Value; Pasta.Cells[Linha,9] := ADOStoredProc1qte.Value; Pasta.Cells[Linha,10] := ADOStoredProc1vr.Value; Pasta.Cells[Linha,11] := ADOStoredProc1Total.Value; Pasta.Cells[Linha,12] := ADOStoredProc1Codigotexto.Value; Linha := Linha + 1; ADOStoredProc1.Next; end; Pasta.Columns.AutoFit; Pasta.WorkBooks[1].Sheets[1].Protect(DrawingObjects := False, Contents:=False, Scenarios := true, Password := '1234'); Pasta.Visible := True; Finally ADOStoredProc1.EnableControls; Pasta := Unassigned; end; end; end; end;
  2. Jhonas, obrigado pela resposta. Então esta concluído. Só precisava ter essa certeza. Depois de um trabalho tão exaustivo, não poderia deixar de tomar cuidado. Resta a fazer esmiuçar essa função e estuda-la a fundo para referencias futuras e avançar no meu conhecimento. Um abraço.
  3. Fulvio, o certo é retorna o digito 1 quando o resto for 0, 10 ou 1. coloquei o Modulo 11 do Post Anterior sobre dv 0 quando deveria ser 1. Com esse boleto em mãos fui ao Banco hoje e paguei o boleto normalmente. 10499.79808 08917.700109 04015.895438 1 44990000000000 E os outros continuaram inalterados como esperava. Com seu ultimo post todos agora possuem dv = 1 Isso quer dizer que o correto mesmo é o script anterior. Um abraço.
  4. Analisando a função do módulo 11 do sql server que o Jhonas corrigiu resolvi constatar minuciosamente se havia alguma falha de interpretação. O que esta no manual da Caixa é o seguinte: Módulo "11", com peso de 2 a 9, utilizando o digito 1 para os restos 0, 10 ou 1 (regra exclusiva para cálculo do DV geral do código de barras); na função o que foi alterado foi a variavel @retorno e não a variavel @resto. Talvez esteja de fato resolvido, mas confesso que estou com dúvidas. Por isso gostaria de ter essa confirmação. Haviam 965 boletos cujos dv geral eram 0 e com a função todos ficaram como 1. É isso mesmo? Desde já agradeço. Eis a função: USE [secraso] GO /****** Object: UserDefinedFunction [dbo].[Modulo11] Script Date: 01/23/2010 11:22:30 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER FUNCTION [dbo].[Modulo11](@VALOR varchar(60)) RETURNS CHAR(1) AS BEGIN DECLARE @SOMA INT, @CONTADOR INT, @PESO INT, @DIGITO INT, @RETORNO CHAR(1), @BASE INT, @RESTO BIT SET @SOMA = 0 SET @PESO = 2 SET @BASE = 9 SET @RESTO = 0 SET @CONTADOR = Len(@VALOR) LOOP: BEGIN SET @SOMA = @SOMA + (Convert(int, SubString(@VALOR, @CONTADOR, 1)) * @PESO) IF (@PESO < @BASE) SET @PESO = @PESO + 1 ELSE SET @PESO = 2 SET @CONTADOR = @CONTADOR-1 END IF @CONTADOR >= 1 GOTO LOOP IF (@RESTO = 1) BEGIN SET @RETORNO = (@SOMA % 11) END ELSE BEGIN SET @DIGITO = 11 - (@SOMA % 11) IF (@DIGITO > 9) SET @DIGITO = 0 SET @RETORNO = @DIGITO END IF @RETORNO=0 or @RETORNO=10 SET @RETORNO = 1 RETURN @RETORNO END
  5. Analisando a função do módulo 11 do sql server que o Fulvio corrigiu resolvi constatar minuciosamente se havia alguma falha de interpretação. O que está no manual da Caixa é o seguinte: Módulo "11", com peso de 2 a 9, utilizando o digito 1 para os restos 0, 10 ou 1 (regra exclusiva para cálculo do DV geral do código de barras); na função o que foi alterado foi a variavel @retorno e não a variavel @resto. Talvez esteja de fato resolvido, mas confesso que estou com dúvidas. Por isso gostaria de ter essa confirmação. Haviam 965 boletos cujos dv geral eram 0 e com a função todos ficaram como 1. É isso mesmo? Desde já agradeço. Eis a função: USE [secraso] GO /****** Object: UserDefinedFunction [dbo].[Modulo11] Script Date: 01/23/2010 11:22:30 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER FUNCTION [dbo].[Modulo11](@VALOR varchar(60)) RETURNS CHAR(1) AS BEGIN DECLARE @SOMA INT, @CONTADOR INT, @PESO INT, @DIGITO INT, @RETORNO CHAR(1), @BASE INT, @RESTO BIT SET @SOMA = 0 SET @PESO = 2 SET @BASE = 9 SET @RESTO = 0 SET @CONTADOR = Len(@VALOR) LOOP: BEGIN SET @SOMA = @SOMA + (Convert(int, SubString(@VALOR, @CONTADOR, 1)) * @PESO) IF (@PESO < @BASE) SET @PESO = @PESO + 1 ELSE SET @PESO = 2 SET @CONTADOR = @CONTADOR-1 END IF @CONTADOR >= 1 GOTO LOOP IF (@RESTO = 1) BEGIN SET @RETORNO = (@SOMA % 11) END ELSE BEGIN SET @DIGITO = 11 - (@SOMA % 11) IF (@DIGITO > 9) SET @DIGITO = 0 SET @RETORNO = @DIGITO END IF @RETORNO=0 or @RETORNO=10 SET @RETORNO = 1 RETURN @RETORNO END
  6. Jhonas, havia colocado meu problema também no forum de sql server, e a resposta foi igual a sua. Resolveu e agradeço novamente a ajuda. Um abraço. Segue o código corrigido: USE [secraso] GO /****** Object: UserDefinedFunction [dbo].[Modulo11] Script Date: 01/21/2010 21:49:02 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER FUNCTION [dbo].[Modulo11](@VALOR varchar(60)) RETURNS CHAR(1) AS BEGIN DECLARE @SOMA INT, @CONTADOR INT, @PESO INT, @DIGITO INT, @RETORNO CHAR(1), @BASE INT, @RESTO BIT SET @SOMA = 0 SET @PESO = 2 SET @BASE = 9 SET @RESTO = 0 SET @CONTADOR = Len(@VALOR) LOOP: BEGIN SET @SOMA = @SOMA + (Convert(int, SubString(@VALOR, @CONTADOR, 1)) * @PESO) IF (@PESO < @BASE) SET @PESO = @PESO + 1 ELSE SET @PESO = 2 SET @CONTADOR = @CONTADOR-1 END IF @CONTADOR >= 1 GOTO LOOP IF (@RESTO = 1) BEGIN SET @RETORNO = (@SOMA % 11) END ELSE BEGIN SET @DIGITO = 11 - (@SOMA % 11) IF (@DIGITO > 9) SET @DIGITO = 0 SET @RETORNO = @DIGITO END IF @RETORNO=0 or @RETORNO=10 SET @RETORNO = 1 RETURN @RETORNO END
  7. Resolveu. Fulvio, muito obrigado, voce não sabe a ajuda que deu. Muito, muito obrigado. Desejo todo o sucesso e paz para voce e sua familia. Um grande abraço.
  8. Estou usando o sql server e o delphi 7. Devido a imprecisão do manual de boleto bancário da caixa. Depois de 6000 impressões, 2 clientes ligaram dizendo que não conseguiram efetuar o pagamento. A coincidência é que o dv geral do código de barras dos dois é 0. Liguei para lá e disseram que não pode ser 0 no dv geral. Agora é que dizem isso. Abaixo segue a função que uso para saber o dv geral do módulo 11. Se o resto for 0, 10 ou 1 o dv geral será 1. Como adequo essa função? Desde já agradeço. USE [secraso] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER FUNCTION [dbo].[Modulo11](@VALOR varchar(60)) RETURNS CHAR(1) AS BEGIN DECLARE @SOMA INT, @CONTADOR INT, @PESO INT, @DIGITO INT, @RETORNO CHAR(1), @BASE INT, @RESTO BIT SET @SOMA = 0 SET @PESO = 2 SET @BASE = 9 SET @RESTO = 0 SET @CONTADOR = Len(@VALOR) LOOP: BEGIN SET @SOMA = @SOMA + (Convert(int, SubString(@VALOR, @CONTADOR, 1)) * @PESO) IF (@PESO < @BASE) SET @PESO = @PESO + 1 ELSE SET @PESO = 2 SET @CONTADOR = @CONTADOR-1 END IF @CONTADOR >= 1 GOTO LOOP IF (@RESTO = 1) BEGIN SET @RETORNO = (@SOMA % 11) END ELSE BEGIN SET @DIGITO = 11 - (@SOMA % 11) IF (@DIGITO > 9) SET @DIGITO = 0 SET @RETORNO = @DIGITO END RETURN @RETORNO END
  9. Estou usando o sql server e o delphi 7. Devido a imprecisão do manual de boleto bancário da caixa. Depois de 6000 impressões, 2 clientes ligaram dizendo que não conseguiram efetuar o pagamento. A coincidência é que o dv geral do código de barras dos dois é 0. Liguei para lá e disseram que não pode ser 0 no dv geral. Agora é que dizem isso. Abaixo segue a função que uso para saber o dv geral do módulo 11. Se o resto for 0, 10 ou 1 o dv geral será 1. Como adequo essa função? Desde já agradeço. USE [secraso] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER FUNCTION [dbo].[Modulo11](@VALOR varchar(60)) RETURNS CHAR(1) AS BEGIN DECLARE @SOMA INT, @CONTADOR INT, @PESO INT, @DIGITO INT, @RETORNO CHAR(1), @BASE INT, @RESTO BIT SET @SOMA = 0 SET @PESO = 2 SET @BASE = 9 SET @RESTO = 0 SET @CONTADOR = Len(@VALOR) LOOP: BEGIN SET @SOMA = @SOMA + (Convert(int, SubString(@VALOR, @CONTADOR, 1)) * @PESO) IF (@PESO < @BASE) SET @PESO = @PESO + 1 ELSE SET @PESO = 2 SET @CONTADOR = @CONTADOR-1 END IF @CONTADOR >= 1 GOTO LOOP IF (@RESTO = 1) BEGIN SET @RETORNO = (@SOMA % 11) END ELSE BEGIN SET @DIGITO = 11 - (@SOMA % 11) IF (@DIGITO > 9) SET @DIGITO = 0 SET @RETORNO = @DIGITO END RETURN @RETORNO END
  10. Coloque toda a stored procedure para analise, e todo o código em Delphi para poder entender melhor seu problema.
  11. Uso essa stored procedure para atualizar uma tabela através de outra. E depois executo pelo Delphi chamando-a apenas, sem parâmetros, pois já estão contidos na própria stored procedure. USE [secraso] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[sp_quita] AS UPDATE dbo.TblMovimentacao SET dbo.TblMovimentacao.vrpago = dbo.TblArqRetorno.vr, dbo.TblMovimentacao.dtpgto = dbo.TblArqRetornoU.dtpgto FROM dbo.TblMovimentacao, TblArqRetorno, TblArqRetornoU where TblMovimentacao.seq = dbo.TblArqRetorno.numerodoc And TblArqRetorno.cod = dbo.TblArqRetornoU.loteu Se como disse, apenas quando há nulos é que a atualização não acontece, não seria melhor impor isso ao usuário, voce obriga a informar um valor. Se não informar nulo, grava o registro. if dbEdit22.Text = '' then Begin showmessage('Preencha o código corretamente!'); dbEdit22.setfocus; exit; End; QueryAssociados.post; QueryAssociados.Refresh; showmessage('Dados foram atualizados com sucesso!'); Tente adaptar para voce. Um abraço
  12. Seu update não está correto update Cadastro_Gado set Codigo_Situacao=@Codigo_Situacao where @Codigo_Animal=Codigo_Animal Tire o @ .. Where Codigo_Animal = @Codigo_Animal Onde seria = update Cadastro_Gado set Codigo_Situacao= @Codigo_Situacao where Codigo_Animal= @Codigo_Animal E se possivel coloque toda a stored procedure, caso ainda encontre erro
  13. Eu uso de maneira diferente e dá o resultado esperado, mostram-se todas as imagens de todos os produtos da tabela procedure TFrmProdutos.DataSource3DataChange(Sender: TObject; Field: TField); var foto1,guardafoto : string; begin guardafoto := inttostr(ADOQuery1.FieldByName('referência').AsInteger); if not(fileexists('C:\wa\'+guardafoto+'.jpg')) then begin foto1 := ('C:\wa\wa2.jpg'); end else foto1 := ('C:\wa\'+guardafoto+'.jpg'); DbImage1.Picture.loadfromfile(foto1); end; Armazena a imagem conforme o código O código coloquei no OndataChange do data source. Um abraço.
  14. Para quem precisar, o código abaixo, graças ao Jhonas, Lê um arquivo texto e adiciona na tabela com a condição de apenas os que estiverem na 14ª posição. var fArq: TextFile; Caminho: string; Linha: string; mTexto: TStringList; i: integer; valor1, valor2 : string; somatotal : Real; somatotal2 : String; dat :string; data :TDate; Valor : real; numero : integer; begin AdoQuery1.open; if Edit1.Text = '' then Begin statusbar1.Panels[0].Text := ' Selecione o arquivo retorno!'; BitBtn4.setfocus; exit; End; Caminho := Edit1.Text; AssignFile(fArq, Caminho); ReSet(fArq); mTexto := TStringList.Create; try mTexto.LoadFromFile(Caminho); pb.Max := mTexto.Count - 1; i := 0; finally mTexto.Free; end; while not Eof(fArq) do begin Readln(farq, linha); Caption := 'Lendo Linha: ' + IntToStr(i) + ' de: ' + IntToStr(pb.Max); if pos('T',linha) = 14 then Begin dat := copy(linha,15,8); insert('/',dat,3); insert('/',dat,6); data := strtodate(dat); valor := (strtofloat(copy(linha,22,10))/100); numero := strtoint(copy(linha,4,10)); AdoQuery1.ExecSQL; AdoQuery1.Append; Adoquery1.edit; ADOQuery1.FieldbyName('banco').Value := Trim(Copy(Linha, 1, 3)); ADOQuery1.FieldbyName('numerodoc').Value := numero; ADOQuery1.FieldbyName('dt').Value := datetostr(data); ADOQuery1.FieldbyName('vr').Value := valor; ADOQuery1.Post; AdoQuery1.ExecSQL; Inc(i); pb.Position := pb.Position + 1; Application.ProcessMessages; Next; pb.Visible := false; Label1.Caption := 'Total de registros importados: '+ IntToStr(AdoQuery1.Recordcount); soma; end; end;
  15. Jhonas, implantei o seu código e atendeu perfeitamente. Vou adequar ao objetivo final e assim que concluir posto o resultado. Um abraço.
  16. Jhonas, o arquivo está num arquivo texto, na verdade um arquivo .ret o que resulta no mesmo. Como seria nesse arquivo? Mais uma vez, obrigado.
  17. Eu já sabia que fazer tratamento ao arquivo retorno seria trabalhoso, e mais agora que recebi esse arquivo da Caixa. Para o meu sistema só me interessa o Segmento T, por isso só preciso dessa faixa. O exemplo abaixo é um resumo: 10400011T01 030 2009398459000160198008 1040001300001T 0600222400300000263380D0 1040001300002U 060000000000000000000000 10400015 0000020000000000000000 10499999 000001000006000000000 Gostaria de apenas capturar a faixa da segunda linha, onde o 14º digito o identifica. se na 14ª posição não for T, não lê o arquivo. Agradeço de antemão a ajuda.
  18. Jhonas, como sempre voce está certo. Alterei a linha que disse e resolveu. Mais uma vez, muito obrigado. Um abraço.
  19. Prezados colegas, tentei adaptar uma rotina que encontrei no forum para através do delphi fazer o backup no sql server 2005 express. Entretanto surge a mensagem de erro: invalid object name 'sysdatabases' Alguém poderia me dizer como solucionar? De antemão agradeço. Segue a rotina a seguir: procedure TFrmbackup.BitBtn1Click(Sender: TObject); var bancosFormatado: string; begin if Trim(edtBanco.Text) = '' then begin Application.MessageBox('Banco não informado','BackUp',MB_OK or MB_APPLMODAL or MB_ICONWARNING); edtBanco.SetFocus; Exit; end; if Trim(edtDiretorio.Text) = '' then begin Application.MessageBox('Diretório não informado','BackUp',MB_OK or MB_APPLMODAL or MB_ICONWARNING); BitBtn1.SetFocus; Exit; end; bancosFormatado:=Bancos(edtBanco.Text); qryExec.Close; qryExec.SQL.Clear; qryExec.SQL.Add('DECLARE @Data varchar(20), @Data1 varchar(20), @PathBackup varchar(255), @ExtensaoArquivoBAckup varchar(4)'); qryExec.SQL.Add('DECLARE @Nome_Data_Base_Device varchar(255), @Nome_Data_Base_Backup varchar(255)'); qryExec.SQL.Add('set @Data = rtrim(CONVERT(char,getdate(), 112))'); qryExec.SQL.Add('set @Data1 = rtrim(CONVERT(char,getdate() - 1, 112))'); qryExec.SQL.Add('set @PathBackup = ''' + edtDiretorio.Text + ''''); qryExec.SQL.Add('set @ExtensaoArquivoBAckup = ''.bak'''); qryExec.SQL.Add('DECLARE data_bases CURSOR FOR SELECT Name FROM sysdatabases WHERE Name in (''' + bancosFormatado + ''')'); qryExec.SQL.Add('OPEN data_bases'); qryExec.SQL.Add('FETCH NEXT FROM data_bases INTO @Nome_Data_Base_Device'); qryExec.SQL.Add('WHILE @@FETCH_STATUS = 0'); qryExec.SQL.Add(' BEGIN'); qryExec.SQL.Add(' if EXISTS (select Name FROM sysdevices WHERE Name = @Nome_Data_Base_Device)'); qryExec.SQL.Add(' Begin'); qryExec.SQL.Add(' EXEC sp_dropdevice @Nome_Data_Base_Device'); qryExec.SQL.Add(' end'); qryExec.SQL.Add(' set @Nome_Data_Base_Backup = @PathBackup + @Nome_Data_Base_Device + ''_'' + @Data + @ExtensaoArquivoBAckup'); qryExec.SQL.Add(' EXEC sp_addumpdevice ''disk'', @Nome_Data_Base_Device, @Nome_Data_Base_Backup'); qryExec.SQL.Add(' FETCH NEXT FROM data_bases INTO @Nome_Data_Base_Device'); qryExec.SQL.Add(' END'); qryExec.SQL.Add('CLOSE data_bases'); qryExec.SQL.Add('DEALLOCATE data_bases'); qryExec.SQL.Add('DECLARE @Nome_Data_Base varchar(50)'); qryExec.SQL.Add('DECLARE data_bases CURSOR FOR SELECT Name FROM sysdatabases WHERE Name in (''' + bancosFormatado + ''')'); qryExec.SQL.Add('OPEN data_bases'); qryExec.SQL.Add('FETCH NEXT FROM data_bases INTO @Nome_Data_Base'); qryExec.SQL.Add('WHILE @@FETCH_STATUS = 0'); qryExec.SQL.Add(' BEGIN'); qryExec.SQL.Add(' BACKUP DATABASE @Nome_Data_Base TO @Nome_Data_Base'); qryExec.SQL.Add(' FETCH NEXT FROM data_bases INTO @Nome_Data_Base'); qryExec.SQL.Add(' END'); qryExec.SQL.Add('CLOSE data_bases'); qryExec.SQL.Add('DEALLOCATE data_bases'); qryExec.SQL.Add('DECLARE devices CURSOR FOR SELECT Name FROM sysdevices WHERE Name in (''' + bancosFormatado + ''')'); qryExec.SQL.Add('OPEN devices'); qryExec.SQL.Add('FETCH NEXT FROM devices INTO @Nome_Data_Base_Device'); qryExec.SQL.Add('WHILE @@FETCH_STATUS = 0'); qryExec.SQL.Add(' BEGIN'); qryExec.SQL.Add(' if ((SELECT COUNT(Name) FROM sysdatabases WHERE Name = @Nome_Data_Base_Device)= 0)'); qryExec.SQL.Add(' Begin'); qryExec.SQL.Add(' EXEC sp_dropdevice @Nome_Data_Base_Device'); qryExec.SQL.Add(' End'); qryExec.SQL.Add(' FETCH NEXT FROM devices INTO @Nome_Data_Base_Device'); qryExec.SQL.Add(' END'); qryExec.SQL.Add('CLOSE devices'); qryExec.SQL.Add('DEALLOCATE devices'); qryExec.SQL.Add('DECLARE @pObj int, @FileNameDeleted varchar (100)'); qryExec.SQL.Add('DECLARE data_bases CURSOR FOR SELECT Name FROM sysdatabases WHERE Name in (''' + bancosFormatado + ''')'); qryExec.SQL.Add('OPEN data_bases'); qryExec.SQL.Add('FETCH NEXT FROM data_bases INTO @Nome_Data_Base'); qryExec.SQL.Add('EXEC sp_OACreate "Scripting.FileSystemObject", @pObj OUT'); qryExec.SQL.Add('WHILE @@FETCH_STATUS = 0'); qryExec.SQL.Add(' BEGIN'); qryExec.SQL.Add(' set @FileNameDeleted = @PathBackup + @Nome_Data_Base + ''_'' + @Data1 + @ExtensaoArquivoBAckup'); qryExec.SQL.Add(' EXEC sp_OAMethod @pObj, "DeleteFile", null, @FileNameDeleted'); qryExec.SQL.Add(' FETCH NEXT FROM data_bases INTO @Nome_Data_Base'); qryExec.SQL.Add(' END'); qryExec.SQL.Add('EXEC sp_OADestroy @pObj'); qryExec.SQL.Add('CLOSE data_bases'); qryExec.SQL.Add('DEALLOCATE data_bases'); qryExec.ExecSQL; Application.MessageBox(PChar('Backup realizado em: ' + edtDiretorio.Text),'BackUp', MB_OK or MB_APPLMODAL or MB_ICONINFORMATION); end;
  20. Resolvi meu problema. E foi até relativamente fácil. Como estou utilizando o sql server criei uma stored procedure. USE [secraso] GO /****** Object: StoredProcedure [dbo].[sp_quita] Script Date: 12/28/2009 18:48:54 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[sp_quita] AS UPDATE dbo.TblMovimentacao SET dbo.TblMovimentacao.vrpago = dbo.TblArqRetorno.vr, dbo.TblMovimentacao.dtpgto = dbo.TblArqRetorno.dt FROM dbo.TblMovimentacao INNER JOIN dbo.TblArqRetorno ON dbo.TblMovimentacao.seq = dbo.TblArqRetorno.numerodoc E depois foi só chama-la no Delphi. ADOStoredProc1.Close; ADOStoredProc1.ExecProc; showmessage('boletos quitados com sucesso!!!'); Douglas, obrigado pela atenção Bom, pessoal, Feliz Ano Novo a todos!
  21. Prezado Douglas, obrigado pela atenção. Meu código estava incompleto e tambem adaptei conforme sua sugestão. Entretando surge uma nova mensagem: "The multi-part identifier AdoQuery1.vr could not be bound" Alterei a linha para AdoQuery2.sql.add ('Update TblMovimentacao Set TblMovimentacao.vrpago = 200, ' + ... E a mensagem de erro foi para o campo dt da linha seguinte: The multi-part identifier AdoQuery1.dt could not be bound Acredito que o problema é no parametro da tabela de origem que quero manipular, no caso AdoQuery1. Segue o código que alterei. Um abraço. AdoQuery1.Close; AdoQuery1.sql.clear; AdoQuery1.sql.add ('select * from TblArqRetorno '); AdoQuery1.Open; if not (AdoQuery1.IsEmpty) then begin with AdoQuery2 do begin close; AdoQuery2.sql.clear; AdoQuery2.sql.add ('Update TblMovimentacao Set TblMovimentacao.vrpago = AdoQuery1.vr, ' + 'TblMovimentacao.dtpgto = AdoQuery1.dt ' + 'FROM dbo.TblMovimentacao ' + 'INNER JOIN TblArqRetorno ON TblMovimentacao.seq = TblArqRetorno.numerodoc '); AdoQuery2.open; showmessage('boletos quitados com sucesso!!!'); end; end;
  22. Prezados colegas, acredito que esse problema é a culminação de um trabalho de boleto bancário, onde se deve quitar os boletos liquidados pelo Banco. Depois de muita procura, não encontrei a solução: Ao clicar surge a mensagem de erro: Incorrect syntax near TblMovimentação. A mensagem é clara, mas não consigo resolver. Eis o código completo: begin AdoQuery1.Close; AdoQuery1.sql.clear; AdoQuery1.sql.add ('select * from TblArqRetorno '); AdoQuery1.Open; if not (AdoQuery1.IsEmpty) then begin with AdoQuery2 do begin close; AdoQuery2.sql.clear; AdoQuery2.sql.add (' Update TblMovimentacao TblMovimentacao.vrpago = AdoQuery1.vr, ') ; AdoQuery2.sql.add (' TblMovimentacao.dtpgto = AdoQuery1.dt '); AdoQuery2.sql.add (' FROM dbo.TblMovimentacao '); AdoQuery2.sql.add (' INNER JOIN TblArqRetorno ON TblMovimentacao.seq = TblArqRetorno.numerodoc '); AdoQuery2.open; showmessage('boletos quitados com sucesso!!!'); end; end; end;
  23. Por favor desconsidere o último post. Era apenas batalhar um pouco mais no código Criei uma variavel numero integer e essa linha: numero := strtoint(copy(linha,4,10)); E pronto! Tópico Resolvido. Um abraço.
  24. Jhonas, desculpe o incômodo, mas nessa sequencia 1040000015894150120100000000050 A posição 3 até 11 = 0000015894 Gostaria que fosse desprezado os zeros a esquerda e se armazenasse apenas 15894. Como soluciono esse problema? Agradeço a valiosa ajuda. Um abraço.
  25. Jhonas, mais uma vez, obrigado. Até no Natal voce se prontifica em ajudar. Muito sucesso à você, pois merece. Adaptei o seu código e era de fato o que precisava. Segue abaixo o código completo para quem precise um dia. Um abraço. procedure TFrmArquivoRetorno.BitBtn1Click(Sender: TObject); var fArq: TextFile; Caminho: string; Linha: string; mTexto: TStringList; i: integer; valor1, valor2 : string; somatotal : Real; somatotal2 : String; dat :string; data :TDate; Valor : real; begin if Edit1.Text = '' then Begin statusbar1.Panels[0].Text := ' Selecione o arquivo retorno!'; BitBtn4.setfocus; exit; End; Caminho := Edit1.Text; AssignFile(fArq, Caminho); ReSet(fArq); mTexto := TStringList.Create; try mTexto.LoadFromFile(Caminho); pb.Max := mTexto.Count - 1; i := 0; finally mTexto.Free; end; while not Eof(fArq) do begin Readln(farq, linha); Caption := 'Lendo Linha: ' + IntToStr(i) + ' de: ' + IntToStr(pb.Max); dat := copy(linha,14,8); insert('/',dat,3); insert('/',dat,6); data := strtodate(dat); valor := (strtofloat(copy(linha,22,10))/100); AdoQuery1.Open; AdoQuery1.Append; Adoquery1.edit; ADOQuery1.FieldbyName('banco').Value := Trim(Copy(Linha, 1, 3)); ADOQuery1.FieldbyName('numero').Value := Trim(Copy(Linha, 4, 13)); ADOQuery1.FieldbyName('dt').Value := datetostr(data); ADOQuery1.FieldbyName('vr').Value := valor; ADOQuery1.Post; Inc(i); pb.Position := pb.Position + 1; Application.ProcessMessages; Next; AdoQuery1.close; AdoQuery1.Open; pb.Visible := false; Label1.Caption := 'Total de registros importados: '+ IntToStr(AdoQuery1.Recordcount); soma End; End;
×
×
  • Criar Novo...