
Alberto Mota
Membros-
Total de itens
296 -
Registro em
-
Última visita
Tudo que Alberto Mota postou
-
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;
-
(Resolvido) Confirmação do Módulo 11
pergunta respondeu ao Alberto Mota de Alberto Mota em Delphi, Kylix
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. -
(Resolvido) Resto do Modulo 11 Código de Barras
pergunta respondeu ao Alberto Mota de Alberto Mota em SQL Server
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. -
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
-
(Resolvido) Resto do Modulo 11 Código de Barras
pergunta respondeu ao Alberto Mota de Alberto Mota em SQL Server
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 -
(Resolvido) Resto do Modulo 11 Código de Barras
pergunta respondeu ao Alberto Mota de Alberto Mota em Delphi, Kylix
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 -
(Resolvido) Resto do Modulo 11 Código de Barras
pergunta respondeu ao Alberto Mota de Alberto Mota em SQL Server
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. -
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
-
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
-
(Resolvido) erro ao dar update em campo Null
pergunta respondeu ao flavioavilela de Alberto Mota em Delphi, Kylix
Coloque toda a stored procedure para analise, e todo o código em Delphi para poder entender melhor seu problema. -
(Resolvido) erro ao dar update em campo Null
pergunta respondeu ao flavioavilela de Alberto Mota em Delphi, Kylix
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 -
(Resolvido) erro ao dar update em campo Null
pergunta respondeu ao flavioavilela de Alberto Mota em Delphi, Kylix
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 -
salvando caminho da imagem [ajuda]
pergunta respondeu ao Felipe da Silva COsta de Alberto Mota em Delphi, Kylix
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. -
(Resolvido) Arquivo Retorno Descontinuado
pergunta respondeu ao Alberto Mota de Alberto Mota em Delphi, Kylix
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; -
(Resolvido) Arquivo Retorno Descontinuado
pergunta respondeu ao Alberto Mota de Alberto Mota em Delphi, Kylix
Jhonas, implantei o seu código e atendeu perfeitamente. Vou adequar ao objetivo final e assim que concluir posto o resultado. Um abraço. -
(Resolvido) Arquivo Retorno Descontinuado
pergunta respondeu ao Alberto Mota de Alberto Mota em Delphi, Kylix
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. -
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.
-
Jhonas, como sempre voce está certo. Alterei a linha que disse e resolveu. Mais uma vez, muito obrigado. Um abraço.
-
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;
-
(Resolvido) Atualizar para Tabela o Arquivo Retorno
pergunta respondeu ao Alberto Mota de Alberto Mota em Delphi, Kylix
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! -
(Resolvido) Atualizar para Tabela o Arquivo Retorno
pergunta respondeu ao Alberto Mota de Alberto Mota em Delphi, Kylix
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; -
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;
-
(Resolvido) Tratamento de Arquivo Retorno
pergunta respondeu ao Alberto Mota de Alberto Mota em Delphi, Kylix
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. -
(Resolvido) Tratamento de Arquivo Retorno
pergunta respondeu ao Alberto Mota de Alberto Mota em Delphi, Kylix
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. -
(Resolvido) Tratamento de Arquivo Retorno
pergunta respondeu ao Alberto Mota de Alberto Mota em Delphi, Kylix
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;