Re: [delphi-br] Lazarus + zeoslib + Oracle9i.
Alisson, Entre na lista Lazarus-BR (http://groups.google.com.br/group/lazarus-br?hl=pt-BR) que o pessoal com certeza te ajudará. Alisson escreveu: Pessoal, estou fazendo updates com o ZQuery.ExecSql do Zeos Lib no Lazarus. Gostaria de saber se tem como obter o número de registros efetados pelo update através da Zquery. Obrigado! -- []’s. Evandro Siqueira Gerente de TI Linna L’essentiel Lingerie (79) 3254-5511 Ramal 218 skype: evandro.lessentiel -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM * Para ver as mensagens antigas, acesse: http://br.groups.yahoo.com/group/delphi-br/messages * Para falar com o moderador, envie um e-mail para: delphi-br-ow...@yahoogrupos.com.br Links do Yahoo! Grupos * Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/delphi-br/ * Para sair deste grupo, envie um e-mail para: delphi-br-unsubscr...@yahoogrupos.com.br * O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html
Re: [delphi-br] Lazarus + zeoslib + Oracle9i.
Ah, Walter... Dá um desconto. Lazarus e Delphi são muito parecidas e o zeos funciona igualzinho nas duas linguagens. Eh amigão velho, acho que a idade tá te deixando meio rabugento. k Walter Chagas (Bol) escreveu: Se não me engano esta lista é de Delphi e não de Lazarus nao []s Walter Alves Chagas Junior Belo Horizonte - MG - Brazil wchag...@bol.com.br http://delphitocorporerm.blogspot.com/ MSN: whitesock...@hotmail.com SKYPE: WalterChagasJr - Original Message - From: Alisson abru...@gmail.com To: delphi-br@yahoogrupos.com.br Sent: Thursday, July 22, 2010 9:45 PM Subject: [delphi-br] Lazarus + zeoslib + Oracle9i. Pessoal, estou fazendo updates com o ZQuery.ExecSql do Zeos Lib no Lazarus. Gostaria de saber se tem como obter o número de registros efetados pelo update através da Zquery. Obrigado! -- []’s. Evandro Siqueira Gerente de TI Linna L’essentiel Lingerie (79) 3254-5511 Ramal 218 skype: evandro.lessentiel -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM * Para ver as mensagens antigas, acesse: http://br.groups.yahoo.com/group/delphi-br/messages * Para falar com o moderador, envie um e-mail para: delphi-br-ow...@yahoogrupos.com.br Links do Yahoo! Grupos * Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/delphi-br/ * Para sair deste grupo, envie um e-mail para: delphi-br-unsubscr...@yahoogrupos.com.br * O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html
Re: [delphi-br] [CLIENTDATASET 3 TABELAS]
Não entendi, a idéia não é essa mesma, para cada registro do pai carregar os filhos automaticamente. Exemplifica o que vc constatou. O que ele tava executando desnecessariamente. Em 22 de julho de 2010 22:09, Eny Urias enyur...@yahoo.com.br escreveu: Só para deixar registrado: Eu usei por muito tempo esse esquema do DATASETFIELD para utilizar em Master/Detail... Até que um dia, utilizando a ferramenta OraTracer para pegar um comando sql do Oracle eu pude perceber que ao utilizar essa técnica, quando o CDS carrega os registros do Master, ele tras também, para cada registro pai, todos os registros do filho... Fiquei abismada com o tráfego que isso causa na rede... Quando o DBA da empresa viu disse para nunca mais utilizar dessa forma... Agora eu abro o CDS filho utilizando o mesmo parametro mas no evento AfterScroll do CDS pai... Alguém já fez essa verificação com outros bancos? -- Eny Trova Urias Somos o que repetitivamente fazemos, portanto, a excelência não é um feito, mas um hábito- Aristóteles De: Walter Chagas (Bol) wchag...@bol.com.br wchagasj%40bol.com.br Para: delphi-br@yahoogrupos.com.br delphi-br%40yahoogrupos.com.br Enviadas: Quinta-feira, 22 de Julho de 2010 14:58:28 Assunto: Re: [delphi-br] [CLIENTDATASET 3 TABELAS] Marcio, Este passo-a-passo meu já é bem conhecido aqui na lista. Ve se te atende: 1) TODAS AS TABELAS ENVOLVIDAS NESTE PROCESSO TEM QUE TER CHAVE PRIMÁRIA E ESTRANGEIRA, DO CONTRARIO ISTO DAÍ NÃO VAI FUNCIONAR 100% ESTÁVEL. 2) Coloque um componente TADOConnection no seu DataModule e defina as configurações devidas nele. 3) Coloque um compoente TQuery no Datamodule ou então um TSQLDataSet. Vamos Chamá-lo de qMaster, ou sqldMaster. 4) Coloque na propriedade SQL do qMaster, ou então na propriedade CommandText do sqldMaster a sentença SQL que você deseja buscar como dados da Tabela Master. 5) Dê um clique duplo na qMaster. Aparecerá o FieldsEditor. Manda adicionar todo mundo. 6) Em cada TField, localize a propriedade providerflags. Os campos que são chave primária na Tabela, ficaraão com pfInkey true nos, os demais ficou false. Os pfInUpdate e pfInWhere todos ficam como true (em todos os campos). 7) Sete a propriedade CursorLocation da qMaster ou do sqldMaster pra clUseServer 8) Se a sentença SQL da qMaster tiver parametros, ajuste as configurações dele, na propriedade Parameters (A não configuração do parametro irá dar pau nos ClientDatasets posteriormente) 9) Coloque um componente TDatasetProvider no Datamodule. vamos chamá-lo de dspMaster. 10) Aponte o Dataset dele pra qMaster ou pro sqldMaster. 11) Abra a propriedade Options do dspMaster. Todas as subpropriedades dele devem ficar como false, exceto as poCascadeDeletes, poCascadeUpdates, poAutoRefresh. Estas tres deverão ficar setadas como True. 12) Mude a propriedade, no dspMaster, UpdateMode para upWhereKeyOnly 13) Coloque no seu Datamodule um componente TClientDataset. Vamos chamalo de cdsMaster. 14) Aponte o Provider dele pra dspMaster. 15) Ative o cdsMaster, mudando a propreiedade Active dele para True. Dê um clique duplo na cdsMaster. Aparecerá o FieldsEditor. Manda adicionar todo mundo. 16) Repita o passo 6. Mas agora, você pode formatar os campos. Na propriedade DisplayLabel, coloque um nome mais legível ao usuário. Na propriedade Displayformat, você pode formatar valores monetários e de data para serem exibidos. Na propriedade EditFormat voce pode formatar estes valores para serem editados no cadastro. A propriedade Visible do TField, permite você ocultar este campo nos DBwares. 17) Coloque no seu DataModule, um componente TDataSource. Vamos chama-lo de dsMaster. 18) Aponte o Dataset dele para o cdsMaster. Seu Módulo Master está pronto. Agora vamos linkar ele ao Modulo detail. 1) Coloque no seu DataModule, um componente TDataSource. Vamos chama-lo de dsMasterDetail. 2) Aponte o Dataset dele para o dsMaster. 3)Coloque um compoente TQuery no Datamodule ou então um TSQLDataSet. Vamos Chamá-lo de qDetail, ou sqldDetail. 4) Coloque na propriedade SQL do qMaster, ou então na propriedade CommandText do sqldMaster a sentença SQL que você deseja buscar como dados da Tabela Detail, com o detalhe de que o parametro de referência na tabela detail, deve ter OBRIGATÓRIAMENTE o nome exato do campo chave na tabela master. Veja o exemplo: Na tabela master queremos buscar todas as MM (movimentação de material) de um determinado amoxarifado: select IDMOV, CODTMV, SERIE, NUMEROMOV, DATAEMISSAO, DATAENTREGA, COMPETENCIA, CODFILIAL, CODPESSOA, CODLOCALIDADE, CODOSATIV, CODCONTRATO, CODLOC, CODFILIALDEST, CODLOCDEST, STATUS, OBSERVACAO, USRCRIACAO, DATACRIACAO, USRALTERACAO, DATAALTERACAO, DATAEXPORTACAO, NOMEARQEXPORT, CODCCUSTO, CODDEPTO, CODAREA from ZMMTMOV Na tabela detail, queremos buscar todos os itens da MM (movimentação de material) de um determinado registro master:
Re: [delphi-br] Lazarus + zeoslib + Oracle9i.
Depois de executar o método ExecSql, execute a function RowsAffected, que retorna a quantidade de registros afetados. Normalmente o próprio ExecSql já retorna um inteiro com os registros afetados, quando não retorna, é comum ter uma function ou property para obter essa informação. []s Em 22 de julho de 2010 21:45, Alisson abru...@gmail.com escreveu: Pessoal, estou fazendo updates com o ZQuery.ExecSql do Zeos Lib no Lazarus. Gostaria de saber se tem como obter o número de registros efetados pelo update através da Zquery. Obrigado! [As partes desta mensagem que não continham texto foram removidas] -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM * Para ver as mensagens antigas, acesse: http://br.groups.yahoo.com/group/delphi-br/messages * Para falar com o moderador, envie um e-mail para: delphi-br-ow...@yahoogrupos.com.br Links do Yahoo! Grupos * Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/delphi-br/ * Para sair deste grupo, envie um e-mail para: delphi-br-unsubscr...@yahoogrupos.com.br * O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html
Re: [delphi-br] Re: Solução para MyConnection
Quanto vc está debugando, todas as exceções são mostradas, mesmo as que estão dentro do bloco try..except..end. Se rodar por fora do delphi ou desativar o opção Stop on Delphi Exceptions em Debugger Options\Language Exceptions (Delphi 7), essa mensagem não vai mais aparecer debug. Em 22 de julho de 2010 18:52, brunolbrasil brunolbra...@yahoo.com.brescreveu: Pessoal, não ta dando certo! Eu to fazendo assim: 1 try 2 myConnection.Connected := false; 3 myConnection.Server := edit3.Text; //o edit3.text está recebendo um valor que não existe 4 myConnection.Database := edit5.Text; 5 myConnection.Connected := true; //aqui o programa dá o erro 6 ShowMessage('1'); except 7 showMessage('Existem dados errados! Favor corrigi-los.'); 8 close; end; O título da caixa com o erro é o seguinte: Debugger Exception Notification Se eu tirar a linha 5 ele execulta tudo sem problema, mas não faz os comandos do except. Um abraço a todos! --- Em delphi-br@yahoogrupos.com.br delphi-br%40yahoogrupos.com.br, Eduardo Silva dos Santos eduardo@... escreveu Usa um try except no código. Att, ... Eduardo Silva dos Santos DRD SISTEMAS (27) 3218-4201 (27) 9961-7095 MSN: eduardo@... Site: http://www.drdsistemas.com.br/ ... Em 22 de julho de 2010 10:24, Bruno Lepesqueur brunolbra...@...escreveu: Galera... estou com um probleminha! Eu inseri um myConnection (componente do myDAC) em meu formulário e criei na tela inicial do programa umas opções pra se mudar as configurações desse componente myConnection (qdo necessário), mas qdo se coloca uma opção que não existe no formulário, tipo um banco de dados que não existe, o sistema gera um erro que eu não gostaria que gerasse! Fiz assim: myConnection .Connected := false; myConnection .Database := edit5.Text; myConnection .Server := edit3.Text; Qdo o usuário digita no edti3.text um valor de Servidor que não existe, o sistema gera um erro. A solução que pensei foi a seguinte... Qdo o erro for gerado, ao invés de aparecer o erro, fazer um if para enviar uma msg tipo um showMessage informando ao usuário que aquele Server não existe, mas eu não sei fazer isso! Seria mais ou menos assim: if myconnection.server (192.168.0.1) não existir faça isso... Podem me dar uma dica inicial? Um abraço! [As partes desta mensagem que não continham texto foram removidas] [As partes desta mensagem que não continham texto foram removidas] [As partes desta mensagem que não continham texto foram removidas] -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM * Para ver as mensagens antigas, acesse: http://br.groups.yahoo.com/group/delphi-br/messages * Para falar com o moderador, envie um e-mail para: delphi-br-ow...@yahoogrupos.com.br Links do Yahoo! Grupos * Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/delphi-br/ * Para sair deste grupo, envie um e-mail para: delphi-br-unsubscr...@yahoogrupos.com.br * O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html
Res: [Bulk] Re: [delphi-br] Re: Solução para MyConnection
Obrigado Fabricio, mas me dá pelo menos um empurrão pra eu saber como rodar isso por fora ou como desativar a opção Stop on Delphi Exceptions. Outra coisa... desabilitar isso é viável? Um abraço! ---Mensagem original--- De: Fabricio Colombo Data: 07/23/10 07:45:34 Para: delphi-br@yahoogrupos.com.br Assunto: [Bulk] Re: [delphi-br] Re: Solução para MyConnection Quanto vc está debugando, todas as exceções são mostradas, mesmo as que estão dentro do bloco try..except..end. Se rodar por fora do delphi ou desativar o opção Stop on Delphi Exceptions em Debugger Options\Language Exceptions (Delphi 7), essa mensagem não vai mais aparecer debug. Em 22 de julho de 2010 18:52, brunolbrasil brunolbra...@yahoo.com brescreveu: Pessoal, não ta dando certo! Eu to fazendo assim: 1 try 2 myConnection.Connected := false; 3 myConnection.Server := edit3.Text; //o edit3.text está recebendo um valor que não existe 4 myConnection.Database := edit5.Text; 5 myConnection.Connected := true; //aqui o programa dá o erro 6 ShowMessage('1'); except 7 showMessage('Existem dados errados! Favor corrigi-los.'); 8 close; end; O título da caixa com o erro é o seguinte: Debugger Exception Notification Se eu tirar a linha 5 ele execulta tudo sem problema, mas não faz os comandos do except. Um abraço a todos! --- Em delphi-br@yahoogrupos.com.br delphi-br%40yahoogrupos.com.br, Eduardo Silva dos Santos eduardo@... escreveu Usa um try except no código. Att, ... Eduardo Silva dos Santos DRD SISTEMAS (27) 3218-4201 (27) 9961-7095 MSN: eduardo@... Site: http://www.drdsistemas.com.br/ ... Em 22 de julho de 2010 10:24, Bruno Lepesqueur brunolbra...@...escreveu: Galera... estou com um probleminha! Eu inseri um myConnection (componente do myDAC) em meu formulário e criei na tela inicial do programa umas opções pra se mudar as configurações desse componente myConnection (qdo necessário), mas qdo se coloca uma opção que não existe no formulário, tipo um banco de dados que não existe, o sistema gera um erro que eu não gostaria que gerasse! Fiz assim: myConnection .Connected := false; myConnection .Database := edit5.Text; myConnection .Server := edit3.Text; Qdo o usuário digita no edti3.text um valor de Servidor que não existe o sistema gera um erro. A solução que pensei foi a seguinte... Qdo o erro for gerado, ao invés de aparecer o erro, fazer um if para enviar uma msg tipo um showMessage informando ao usuário que aquele Server não existe, mas eu não sei fazer isso! Seria mais ou menos assim: if myconnection.server (192.168.0.1) não existir faça isso... Podem me dar uma dica inicial? Um abraço! [As partes desta mensagem que não continham texto foram removidas] [As partes desta mensagem que não continham texto foram removidas] [As partes desta mensagem que não continham texto foram removidas] -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM [As partes desta mensagem que não continham texto foram removidas]
Re: [delphi-br] [CLIENTDATASET 3 TABELAS]
Como que é isso? []s Walter Alves Chagas Junior Belo Horizonte - MG - Brazil wchag...@bol.com.br http://delphitocorporerm.blogspot.com/ MSN: whitesock...@hotmail.com SKYPE: WalterChagasJr - Original Message - From: Eny Urias enyur...@yahoo.com.br To: delphi-br@yahoogrupos.com.br Sent: Thursday, July 22, 2010 10:09 PM Subject: Res: [delphi-br] [CLIENTDATASET 3 TABELAS] Só para deixar registrado: Eu usei por muito tempo esse esquema do DATASETFIELD para utilizar em Master/Detail... Até que um dia, utilizando a ferramenta OraTracer para pegar um comando sql do Oracle eu pude perceber que ao utilizar essa técnica, quando o CDS carrega os registros do Master, ele tras também, para cada registro pai, todos os registros do filho... Fiquei abismada com o tráfego que isso causa na rede... Quando o DBA da empresa viu disse para nunca mais utilizar dessa forma... Agora eu abro o CDS filho utilizando o mesmo parametro mas no evento AfterScroll do CDS pai... Alguém já fez essa verificação com outros bancos? -- Eny Trova Urias Somos o que repetitivamente fazemos, portanto, a excelência não é um feito, mas um hábito- Aristóteles De: Walter Chagas (Bol) wchag...@bol.com.br Para: delphi-br@yahoogrupos.com.br Enviadas: Quinta-feira, 22 de Julho de 2010 14:58:28 Assunto: Re: [delphi-br] [CLIENTDATASET 3 TABELAS] Marcio, Este passo-a-passo meu já é bem conhecido aqui na lista. Ve se te atende: 1) TODAS AS TABELAS ENVOLVIDAS NESTE PROCESSO TEM QUE TER CHAVE PRIMÁRIA E ESTRANGEIRA, DO CONTRARIO ISTO DAÍ NÃO VAI FUNCIONAR 100% ESTÁVEL. 2) Coloque um componente TADOConnection no seu DataModule e defina as configurações devidas nele. 3) Coloque um compoente TQuery no Datamodule ou então um TSQLDataSet. Vamos Chamá-lo de qMaster, ou sqldMaster. 4) Coloque na propriedade SQL do qMaster, ou então na propriedade CommandText do sqldMaster a sentença SQL que você deseja buscar como dados da Tabela Master. 5) Dê um clique duplo na qMaster. Aparecerá o FieldsEditor. Manda adicionar todo mundo. 6) Em cada TField, localize a propriedade providerflags. Os campos que são chave primária na Tabela, ficaraão com pfInkey true nos, os demais ficou false. Os pfInUpdate e pfInWhere todos ficam como true (em todos os campos). 7) Sete a propriedade CursorLocation da qMaster ou do sqldMaster pra clUseServer 8) Se a sentença SQL da qMaster tiver parametros, ajuste as configurações dele, na propriedade Parameters (A não configuração do parametro irá dar pau nos ClientDatasets posteriormente) 9) Coloque um componente TDatasetProvider no Datamodule. vamos chamá-lo de dspMaster. 10) Aponte o Dataset dele pra qMaster ou pro sqldMaster. 11) Abra a propriedade Options do dspMaster. Todas as subpropriedades dele devem ficar como false, exceto as poCascadeDeletes, poCascadeUpdates, poAutoRefresh. Estas tres deverão ficar setadas como True. 12) Mude a propriedade, no dspMaster, UpdateMode para upWhereKeyOnly 13) Coloque no seu Datamodule um componente TClientDataset. Vamos chamalo de cdsMaster. 14) Aponte o Provider dele pra dspMaster. 15) Ative o cdsMaster, mudando a propreiedade Active dele para True. Dê um clique duplo na cdsMaster. Aparecerá o FieldsEditor. Manda adicionar todo mundo. 16) Repita o passo 6. Mas agora, você pode formatar os campos. Na propriedade DisplayLabel, coloque um nome mais legível ao usuário. Na propriedade Displayformat, você pode formatar valores monetários e de data para serem exibidos. Na propriedade EditFormat voce pode formatar estes valores para serem editados no cadastro. A propriedade Visible do TField, permite você ocultar este campo nos DBwares. 17) Coloque no seu DataModule, um componente TDataSource. Vamos chama-lo de dsMaster. 18) Aponte o Dataset dele para o cdsMaster. Seu Módulo Master está pronto. Agora vamos linkar ele ao Modulo detail. 1) Coloque no seu DataModule, um componente TDataSource. Vamos chama-lo de dsMasterDetail. 2) Aponte o Dataset dele para o dsMaster. 3)Coloque um compoente TQuery no Datamodule ou então um TSQLDataSet. Vamos Chamá-lo de qDetail, ou sqldDetail. 4) Coloque na propriedade SQL do qMaster, ou então na propriedade CommandText do sqldMaster a sentença SQL que você deseja buscar como dados da Tabela Detail, com o detalhe de que o parametro de referência na tabela detail, deve ter OBRIGATÓRIAMENTE o nome exato do campo chave na tabela master. Veja o exemplo: Na tabela master queremos buscar todas as MM (movimentação de material) de um determinado amoxarifado: select IDMOV, CODTMV, SERIE, NUMEROMOV, DATAEMISSAO, DATAENTREGA, COMPETENCIA, CODFILIAL, CODPESSOA, CODLOCALIDADE, CODOSATIV, CODCONTRATO, CODLOC, CODFILIALDEST, CODLOCDEST, STATUS, OBSERVACAO, USRCRIACAO, DATACRIACAO, USRALTERACAO, DATAALTERACAO, DATAEXPORTACAO, NOMEARQEXPORT, CODCCUSTO, CODDEPTO, CODAREA from ZMMTMOV Na tabela detail, queremos buscar todos os itens da MM (movimentação de material) de um determinado registro master: select IDMOV,
[delphi-br] Importação ignora 1ª linha do arquivo
Nobres colegas, Recentemente tive um problema com a importação de um arquivo. Com a ajuda dos nobres colegas e o envio de um exemplo pelo Walter, consegui sanar o problema. A importação foi realizada. Porém, fazendo uma analise mais detalhada, notei que primeira linha do arquivo nunca é importada. Fica sempre faltando o primeiro registro do arquivo. Estou postando abaixo o código utilizado. Se alguns dos nobres colegas poder me ajudar fico grato. Abraço. unit ufAnaliseDados; interface uses Classes, Forms, DB, Controls, Grids, DBGrids, DBClient, DBXpress, FMTBcd, DBXAutoInc, Provider, SqlExpr, RXCtrls, RXDBCtrl, Buttons, ExtCtrls, XiPanel, Dialogs, JvDialogs, XiProgressBar; type TfrmSIMNE = class(TForm) XiPanel1: TXiPanel; btImportar: TSpeedButton; dbgDados: TDBGrid; DBGrid1: TDBGrid; srcDados: TDataSource; JvOpenDialog1: TJvOpenDialog; Barra: TXiProgressBar; procedure btImportarClick(Sender: TObject); private fDadosTratados: TStringList; fCdsDadosTratados: TClientDataSet; procedure PrepararDados; procedure AnalisarArquivo; procedure CriarDataSet; procedure LiberarDados; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; end; var frmSIMNE: TfrmSIMNE; implementation uses SysUtils, uDM, uImportaProcesso; {$R *.dfm} { TfrmAnaliseDados } procedure TfrmSIMNE.CriarDataSet; var i: integer; lLinhaDados: TStringList; begin { Cria o ClientDataSet } fCdsDadosTratados := TClientDataSet.Create(Self); { Define os campos que o ClientDataSet terá } with fCdsDadosTratados.FieldDefs do for i := 1 to 16 do Add(Format('Campo%2.2d', [i]), ftString, 40); { Cria o ClientDataset com os campos definidos } fCdsDadosTratados.CreateDataSet; { Preenche o ClientDataSet com os dados tratados } lLinhaDados := TStringList.Create; try lLinhaDados.Delimiter := ','; lLinhaDados.QuoteChar := ''; while fDadosTratados.Count 0 do begin fCdsDadosTratados.Append; lLinhaDados.DelimitedText := fDadosTratados[0]; for i := 0 to 15 do fCdsDadosTratados.Fields[i].AsString := lLinhaDados[i]; fDadosTratados.Delete(0); end; finally lLinhaDados.Free; end; { Vincula o ClientDataSet ao DataSource associado ao DBGrid } srcDados.DataSet := fCdsDadosTratados; end; procedure TfrmSIMNE.AnalisarArquivo; var lQtde, lCampos: integer; lArquivo, lLinhaDados: TStringList; sLinhaDados: string; begin If JvOpenDialog1.Execute then Begin lArquivo := TStringList.Create; try lArquivo.LoadFromFile(JvOpenDialog1.FileName); lCampos := 0; lLinhaDados := TStringList.Create; try lLinhaDados.Delimiter := ','; while lArquivo.Count 0 do begin sLinhaDados := lArquivo[0]; lLinhaDados.DelimitedText := sLinhaDados; lLinhaDados.QuoteChar := ''; lQtde := lLinhaDados.Count; if lCampos = 0 then lCampos := lQtde else if lQtde lCampos then raise Exception.CreateFmt( 'Quantidade de campos das linhas de dados é variável.' + sLineBreak + sLineBreak + sLinhaDados + sLineBreak + sLineBreak + '(%d %d).', [lQtde, lCampos]) else fDadosTratados.Add(sLinhaDados); lArquivo.Delete(0); end; finally lLinhaDados.Free; end; finally lArquivo.Free; end; end; end; constructor TfrmSIMNE.Create(AOwner: TComponent); begin inherited Create(AOwner); PrepararDados; AnalisarArquivo; CriarDataSet; end; destructor TfrmSIMNE.Destroy; begin LiberarDados; inherited Destroy; end; procedure TfrmSIMNE.LiberarDados; begin if Assigned(fDadosTratados) then fDadosTratados.Free; if Assigned(fCdsDadosTratados) then begin fCdsDadosTratados.Close; fCdsDadosTratados.Free; end; end; procedure TfrmSIMNE.PrepararDados; begin fDadosTratados := TStringList.Create end; procedure TfrmSIMNE.btImportarClick(Sender: TObject); begin DM.cds_SIM601.Open; Try DM.cds_SIM601.DisableControls; fCdsDadosTratados.First; fCdsDadosTratados.DisableControls; Barra.Position:=0; Barra.Max:=fCdsDadosTratados.RecordCount; while not fCdsDadosTratados.Eof do Begin DM.cds_SIM601.Insert; DM.cds_SIM601.fieldbyname('Numero_NE').AsString :=fCdsDadosTratados.Fields[6].AsString; DM.cds_SIM601.fieldbyname('NP_Numero_Sub_Empenho').AsString :=fCdsDadosTratados.Fields[7].AsString; DM.cds_SIM601.fieldbyname('NP_Numero_NP').AsString :=fCdsDadosTratados.Fields[8].AsString; DM.cds_SIM601.fieldbyname('NP_Data_Ref_Doc').AsString
Re: [delphi-br] Intraweb + Pool de Conexões
Qto a ter Ajax, não existe ainda nesta versão do delphi. Vou procurar a UserSession e ver se estou desconectando corretamente o banco na sessao e se não estiver, colocarei. Essa parte de usar o midas/datasnap com o servidor web que nao entendi muito bem como fazer, vou procurar aqui. Mas, se vc tiver algum exemplo ou pagina q contenha pra eu pesquisar, agradeceria. No mais vou fazer os testes aqui. Vlw pela ajuda. Em 23 de julho de 2010 11:19, Jackson Gomes - ToolsComps jack...@toolsandcomps.com escreveu: Tenho um projeto de Delphi 7 + Intraweb, estou com problema de conexões excessivas no banco de dados, estão ficando conexões ativas no banco. Nunca trabalhei direto com esse pacote do delphi, então tenho as seguintes dúvidas: 1- Existe como fazer pool de conexões usando o Intraweb (ele roda em um servidor IIS) 2- Essas conexões q ficam abertas no banco, por meio do SQLConnection (DBExpress). Qual a melhor forma de matá-las, fazer q o SQLConnection seja desconectado do banco, mesmo quando o usuário fecha o browser no X. não sei se a sua versão tem suporte a events Ajax (Async alguma coisa), mas o ideal é ter um TIWTime com evento asycn de, digamos uns 3 a 4 minutos, e colocar um TimeOut curto no ServerController, mas que seja maior que o do IWTimer. Dessa forma, a sua sessão será terminada logo, caso o usuário pare de usar a aplicação. No Destroy do User Session, vc mata as conexões de banco... Outra alternativa (mais interessante e recomendada) é usar uma camada de acesso a dados fora do aplicativo IW, mas a idéia acima também vale pra isso. Nesse caso, o servidor MIDAS/DataSnap fará o pool de conexões para você. Faz tempo que não programo aplicativos pra BD, mas acho que o MIDAS do Delphi 7 tem suporte a algo relativo a pool de conexões... -- Jackson -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM [As partes desta mensagem que não continham texto foram removidas]
Re: [delphi-br] Importação ignora 1ª linha do arq uivo
Ler código dentro de email é terrível. Se vc colocar o código no Pastebin ( http://pastebin.com) vai nos ajudar a te ajudar. -- Dirlei Dionísio Novo artigo: // Não comente seu código http://MaisQueBomCodigo.blogspot.com Em 23 de julho de 2010 10:11, Ralp Alves Bezerra ral...@gmail.comescreveu: Nobres colegas, Recentemente tive um problema com a importação de um arquivo. Com a ajuda dos nobres colegas e o envio de um exemplo pelo Walter, consegui sanar o problema. A importação foi realizada. Porém, fazendo uma analise mais detalhada, notei que primeira linha do arquivo nunca é importada. Fica sempre faltando o primeiro registro do arquivo. Estou postando abaixo o código utilizado. Se alguns dos nobres colegas poder me ajudar fico grato. Abraço. unit ufAnaliseDados; interface uses Classes, Forms, DB, Controls, Grids, DBGrids, DBClient, DBXpress, FMTBcd, DBXAutoInc, Provider, SqlExpr, RXCtrls, RXDBCtrl, Buttons, ExtCtrls, XiPanel, Dialogs, JvDialogs, XiProgressBar; type TfrmSIMNE = class(TForm) XiPanel1: TXiPanel; btImportar: TSpeedButton; dbgDados: TDBGrid; DBGrid1: TDBGrid; srcDados: TDataSource; JvOpenDialog1: TJvOpenDialog; Barra: TXiProgressBar; procedure btImportarClick(Sender: TObject); private fDadosTratados: TStringList; fCdsDadosTratados: TClientDataSet; procedure PrepararDados; procedure AnalisarArquivo; procedure CriarDataSet; procedure LiberarDados; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; end; var frmSIMNE: TfrmSIMNE; implementation uses SysUtils, uDM, uImportaProcesso; {$R *.dfm} { TfrmAnaliseDados } procedure TfrmSIMNE.CriarDataSet; var i: integer; lLinhaDados: TStringList; begin { Cria o ClientDataSet } fCdsDadosTratados := TClientDataSet.Create(Self); { Define os campos que o ClientDataSet terá } with fCdsDadosTratados.FieldDefs do for i := 1 to 16 do Add(Format('Campo%2.2d', [i]), ftString, 40); { Cria o ClientDataset com os campos definidos } fCdsDadosTratados.CreateDataSet; { Preenche o ClientDataSet com os dados tratados } lLinhaDados := TStringList.Create; try lLinhaDados.Delimiter := ','; lLinhaDados.QuoteChar := ''; while fDadosTratados.Count 0 do begin fCdsDadosTratados.Append; lLinhaDados.DelimitedText := fDadosTratados[0]; for i := 0 to 15 do fCdsDadosTratados.Fields[i].AsString := lLinhaDados[i]; fDadosTratados.Delete(0); end; finally lLinhaDados.Free; end; { Vincula o ClientDataSet ao DataSource associado ao DBGrid } srcDados.DataSet := fCdsDadosTratados; end; procedure TfrmSIMNE.AnalisarArquivo; var lQtde, lCampos: integer; lArquivo, lLinhaDados: TStringList; sLinhaDados: string; begin If JvOpenDialog1.Execute then Begin lArquivo := TStringList.Create; try lArquivo.LoadFromFile(JvOpenDialog1.FileName); lCampos := 0; lLinhaDados := TStringList.Create; try lLinhaDados.Delimiter := ','; while lArquivo.Count 0 do begin sLinhaDados := lArquivo[0]; lLinhaDados.DelimitedText := sLinhaDados; lLinhaDados.QuoteChar := ''; lQtde := lLinhaDados.Count; if lCampos = 0 then lCampos := lQtde else if lQtde lCampos then raise Exception.CreateFmt( 'Quantidade de campos das linhas de dados é variável.' + sLineBreak + sLineBreak + sLinhaDados + sLineBreak + sLineBreak + '(%d %d).', [lQtde, lCampos]) else fDadosTratados.Add(sLinhaDados); lArquivo.Delete(0); end; finally lLinhaDados.Free; end; finally lArquivo.Free; end; end; end; constructor TfrmSIMNE.Create(AOwner: TComponent); begin inherited Create(AOwner); PrepararDados; AnalisarArquivo; CriarDataSet; end; destructor TfrmSIMNE.Destroy; begin LiberarDados; inherited Destroy; end; procedure TfrmSIMNE.LiberarDados; begin if Assigned(fDadosTratados) then fDadosTratados.Free; if Assigned(fCdsDadosTratados) then begin fCdsDadosTratados.Close; fCdsDadosTratados.Free; end; end; procedure TfrmSIMNE.PrepararDados; begin fDadosTratados := TStringList.Create end; procedure TfrmSIMNE.btImportarClick(Sender: TObject); begin DM.cds_SIM601.Open; Try DM.cds_SIM601.DisableControls; fCdsDadosTratados.First; fCdsDadosTratados.DisableControls; Barra.Position:=0; Barra.Max:=fCdsDadosTratados.RecordCount; while not fCdsDadosTratados.Eof do Begin DM.cds_SIM601.Insert; DM.cds_SIM601.fieldbyname('Numero_NE').AsString :=fCdsDadosTratados.Fields[6].AsString; DM.cds_SIM601.fieldbyname('NP_Numero_Sub_Empenho').AsString :=fCdsDadosTratados.Fields[7].AsString; DM.cds_SIM601.fieldbyname('NP_Numero_NP').AsString :=fCdsDadosTratados.Fields[8].AsString; DM.cds_SIM601.fieldbyname('NP_Data_Ref_Doc').AsString :=fCdsDadosTratados.Fields[9].AsString; DM.cds_SIM601.fieldbyname('NP_Num_Doc_Caixa').AsString :=fCdsDadosTratados.Fields[10].AsString; DM.cds_SIM601.fieldbyname('NP_Data_NP').AsString
Res: [delphi-br] Mudar onClick de TMenuItem sem precisar reescrever onClick dos forms
Boa tarde; Você vai precisar mudar o metodo (onclick) chamado pelos menus de alguma forma, pode ser por código (loop, findcomponent) ou manualmente, fazendo os itens de menus chamar uma unica rotina (que marca o item como recente e atualiza os atalhos mais utilizados e que por seguinte execute o metodo original do menu realizando a tarefa para qual o menu é proposto). Atenc; Elazar Dornelles Ceza De: thevortex78 thevorte...@yahoo.com.br Para: delphi-br@yahoogrupos.com.br Enviadas: Sexta-feira, 23 de Julho de 2010 12:41:00 Assunto: [delphi-br] Mudar onClick de TMenuItem sem precisar reescrever onClick dos forms Bom dia a todos. Eu implementei em meus sistemas, uma recurso para colocar na area de trabalho as opções que o cliente mais usa e os itens recentes, ex. o cliente usa mais pedido de vendas e cadastro de clientes entao ele coloca nessa area de trabalho os icones dessas opções a partir de um treeview, sem precisar ficar indo em menus. Tudo funciona legal tem esse treewview que le as informações dos itens de um TMainMenu e preenche esse treeview com elas, entao quando o usuario acessa um form pelo treeview, o sistema marca a opção como recente, como no word e tal ou por um click no botão direito ele pode adicionar aos favoritos dessa area de trabalho. O problema é que quando o usuario acessa a opção pelo item do TMainMenu, ele nao marca como recente, claro. A pergunta é: tem como eu colocar minha função marca_recente para ser acessada no onClick do TMenuItem sem precisar reescrever os eventos onClick de todos os itens de menus de todos os sistemas. Desde ja, muito obrigado a todos. José Ricardo Aviles. [As partes desta mensagem que não continham texto foram removidas]
Re: [delphi-br] Envio EMail pelo Delphi
Boa tarde Eduardo, Implementei isso recentemente num sistema meu. Abaixo uma procedure que peguei do ACBrRNfe e adaptei algumas coisaspara fazer isso. Como o Gmail usa conexão segura, é necessário algumas DLLs para o envio funcionar adequadamente, estas DLLs tem no ACBr e são elas: libeay32.dll, libssl32.dll e ssleay32.dll. uso: EnviarEmailNovo('smtp.gmail.com', '465', 'em...@gmail.com', '123456', 'em...@gmail.com', 'paraq...@dominio.com', 'paraque...@dominio.com', 'Assunto: ', 'anexo.pdf', '', 'Corpo do e-mail', True); procedure EnviarEmail(const sSmtpHost, sSmtpPort, sSmtpUser, sSmtpPasswd, sFrom, sTo, sCC, sAssunto, sAttachment, sAttachment2: String; sMensagem : TStrings; SSL : Boolean); var smtp: TSMTPSend; msg_lines: TStringList; m:TMimemess; p: TMimepart; begin try m:=TMimemess.create; p := m.AddPartMultipart('mixed', nil); if sMensagem nil then m.AddPartText(sMensagem, p); if sAttachment '' then m.AddPartBinaryFromFile(sAttachment, p); if sAttachment2 '' then m.AddPartBinaryFromFile(sAttachment2, p); m.header.tolist.add(sTo); if sCC '' then m.header.tolist.add(sCC); m.header.From := sFrom; m.header.subject:=sAssunto; m.EncodeMessage; msg_lines := TStringList.Create; smtp := TSMTPSend.Create; msg_lines.Add(m.Lines.Text); smtp.UserName := sSmtpUser; smtp.Password := sSmtpPasswd; smtp.TargetHost := sSmtpHost; smtp.TargetPort := sSmtpPort; smtp.FullSSL := SSL; smtp.AutoTLS := SSL; if not smtp.Login() then raise Exception.Create('SMTP ERROR: Login:' + smtp.EnhCodeString); if not smtp.MailFrom(sFrom, Length(sFrom)) then raise Exception.Create('SMTP ERROR: MailFrom:' + smtp.EnhCodeString); if not smtp.MailTo(sTo) then raise Exception.Create('SMTP ERROR: MailTo:' + smtp.EnhCodeString); if not smtp.MailData(msg_lines) then raise Exception.Create('SMTP ERROR: MailData:' + smtp.EnhCodeString); if not smtp.Logout() then raise Exception.Create('SMTP ERROR: Logout:' + smtp.EnhCodeString); finally msg_lines.Free; smtp.Free; m.free; end; end; []s Andrei 2010/7/23 Eduardo Suruagy eduardosuru...@gmail.com: Boa tarde, Alguem consegue enviar e-mail pelo delphi 7 com uma conta do GMail??? Se alguem souber como fazer por favor me expliquem, pois, já tentei de tudo e não consigo Obrigado pela atenção [As partes desta mensagem que não continham texto foram removidas] -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM
Re: [delphi-br] Envio EMail pelo Delphi
Esse assunto foi amplamente debatido aqui outro dia. Procure no historico de mensagens da lista que voce encontrará a solução []s Walter Alves Chagas Junior Belo Horizonte - MG - Brazil wchag...@bol.com.br http://delphitocorporerm.blogspot.com/ MSN: whitesock...@hotmail.com SKYPE: WalterChagasJr - Original Message - From: Eduardo Suruagy eduardosuru...@gmail.com To: delphi-br@yahoogrupos.com.br Sent: Friday, July 23, 2010 2:23 PM Subject: [delphi-br] Envio EMail pelo Delphi Boa tarde, Alguem consegue enviar e-mail pelo delphi 7 com uma conta do GMail??? Se alguem souber como fazer por favor me expliquem, pois, já tentei de tudo e não consigo Obrigado pela atenção [As partes desta mensagem que não continham texto foram removidas]
RES: [delphi-br] Importação ignora 1ª linha do a rquivo
Analisei o fonte (que por sinal, fui eu que implementei inicialmente) e até rodei ele com um arquivo de exemplo que o Ralp mandou para mim na época. Não vi nada de anormal. Ele sempre pega todas as linhas do texto. Sds. -Mensagem original- De: delphi-br@yahoogrupos.com.br [mailto:delphi...@yahoogrupos.com.br] Em nome de Dirlei Dionísio Enviada em: sexta-feira, 23 de julho de 2010 12:19 Para: delphi-br@yahoogrupos.com.br Assunto: Re: [delphi-br] Importação ignora 1ª linha do arquivo Ler código dentro de email é terrível. Se vc colocar o código no Pastebin ( http://pastebin.com) vai nos ajudar a te ajudar. -- Dirlei Dionísio Novo artigo: // Não comente seu código http://MaisQueBomCodigo.blogspot.com Em 23 de julho de 2010 10:11, Ralp Alves Bezerra ral...@gmail.comescreveu: Nobres colegas, Recentemente tive um problema com a importação de um arquivo. Com a ajuda dos nobres colegas e o envio de um exemplo pelo Walter, consegui sanar o problema. A importação foi realizada. Porém, fazendo uma analise mais detalhada, notei que primeira linha do arquivo nunca é importada. Fica sempre faltando o primeiro registro do arquivo. Estou postando abaixo o código utilizado. Se alguns dos nobres colegas poder me ajudar fico grato. Abraço. unit ufAnaliseDados; interface uses Classes, Forms, DB, Controls, Grids, DBGrids, DBClient, DBXpress, FMTBcd, DBXAutoInc, Provider, SqlExpr, RXCtrls, RXDBCtrl, Buttons, ExtCtrls, XiPanel, Dialogs, JvDialogs, XiProgressBar; type TfrmSIMNE = class(TForm) XiPanel1: TXiPanel; btImportar: TSpeedButton; dbgDados: TDBGrid; DBGrid1: TDBGrid; srcDados: TDataSource; JvOpenDialog1: TJvOpenDialog; Barra: TXiProgressBar; procedure btImportarClick(Sender: TObject); private fDadosTratados: TStringList; fCdsDadosTratados: TClientDataSet; procedure PrepararDados; procedure AnalisarArquivo; procedure CriarDataSet; procedure LiberarDados; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; end; var frmSIMNE: TfrmSIMNE; implementation uses SysUtils, uDM, uImportaProcesso; {$R *.dfm} { TfrmAnaliseDados } procedure TfrmSIMNE.CriarDataSet; var i: integer; lLinhaDados: TStringList; begin { Cria o ClientDataSet } fCdsDadosTratados := TClientDataSet.Create(Self); { Define os campos que o ClientDataSet terá } with fCdsDadosTratados.FieldDefs do for i := 1 to 16 do Add(Format('Campo%2.2d', [i]), ftString, 40); { Cria o ClientDataset com os campos definidos } fCdsDadosTratados.CreateDataSet; { Preenche o ClientDataSet com os dados tratados } lLinhaDados := TStringList.Create; try lLinhaDados.Delimiter := ','; lLinhaDados.QuoteChar := ''; while fDadosTratados.Count 0 do begin fCdsDadosTratados.Append; lLinhaDados.DelimitedText := fDadosTratados[0]; for i := 0 to 15 do fCdsDadosTratados.Fields[i].AsString := lLinhaDados[i]; fDadosTratados.Delete(0); end; finally lLinhaDados.Free; end; { Vincula o ClientDataSet ao DataSource associado ao DBGrid } srcDados.DataSet := fCdsDadosTratados; end; procedure TfrmSIMNE.AnalisarArquivo; var lQtde, lCampos: integer; lArquivo, lLinhaDados: TStringList; sLinhaDados: string; begin If JvOpenDialog1.Execute then Begin lArquivo := TStringList.Create; try lArquivo.LoadFromFile(JvOpenDialog1.FileName); lCampos := 0; lLinhaDados := TStringList.Create; try lLinhaDados.Delimiter := ','; while lArquivo.Count 0 do begin sLinhaDados := lArquivo[0]; lLinhaDados.DelimitedText := sLinhaDados; lLinhaDados.QuoteChar := ''; lQtde := lLinhaDados.Count; if lCampos = 0 then lCampos := lQtde else if lQtde lCampos then raise Exception.CreateFmt( 'Quantidade de campos das linhas de dados é variável.' + sLineBreak + sLineBreak + sLinhaDados + sLineBreak + sLineBreak + '(%d %d).', [lQtde, lCampos]) else fDadosTratados.Add(sLinhaDados); lArquivo.Delete(0); end; finally lLinhaDados.Free; end; finally lArquivo.Free; end; end; end; constructor TfrmSIMNE.Create(AOwner: TComponent); begin inherited Create(AOwner); PrepararDados; AnalisarArquivo; CriarDataSet; end; destructor TfrmSIMNE.Destroy; begin LiberarDados; inherited Destroy; end; procedure TfrmSIMNE.LiberarDados; begin if Assigned(fDadosTratados) then fDadosTratados.Free; if Assigned(fCdsDadosTratados) then begin fCdsDadosTratados.Close; fCdsDadosTratados.Free; end; end; procedure TfrmSIMNE.PrepararDados; begin fDadosTratados := TStringList.Create end; procedure TfrmSIMNE.btImportarClick(Sender: TObject); begin DM.cds_SIM601.Open; Try DM.cds_SIM601.DisableControls; fCdsDadosTratados.First; fCdsDadosTratados.DisableControls; Barra.Position:=0; Barra.Max:=fCdsDadosTratados.RecordCount; while not fCdsDadosTratados.Eof do Begin DM.cds_SIM601.Insert; DM.cds_SIM601.fieldbyname('Numero_NE').AsString
Re: [delphi-br] Envio EMail pelo Delphi
Andrei, tem como vc enviar o ACBrRNfe e as dlls usada pra o meu email?? eduardosuru...@gmail.com [As partes desta mensagem que não continham texto foram removidas]
Re: [delphi-br] [CLIENTDATASET 3 TABELAS]
fiquei com a mesma duvida ... estaria no caso, trazendo todos os registros master e todos os details do relacinamento de uma vez só ? tipo fetchall nas duas tabelas ? Em 22 de julho de 2010 23:32, Fabricio Colombo fabricio.colombo@gmail.com escreveu: Não entendi, a idéia não é essa mesma, para cada registro do pai carregar os filhos automaticamente. Exemplifica o que vc constatou. O que ele tava executando desnecessariamente. [As partes desta mensagem que não continham texto foram removidas]
Re: [delphi-br] Ref. Timer Milissegundos
var inicio, fim: String; begin inicio := FormatDateTime('hhmmssmm', now); // procedimento // procedimento // procedimento fim := FormatDateTime('hhmmssmm', now); Label1.caption := IntToStr(StrToInt(fim) - StrtoInt(inicio)) + ' milissegundos para a execução da tarefa'; end; //obs: Altere os tipos das variaveis conforme sua necessidade; // obs2: manere no uso do timer; Em 22 de julho de 2010 10:38, Desenvolvimento Sisponto - Anderson desenvolvime...@sisponto.com.br escreveu: não use timer. crie uma variável do tipo cardinal, e jogue nela o valor da função GetTickCount. No fim, faça uma releitura do gettickcount e subtraia a ultima pela primeira. vc vai ter o tempo em milisegundos assim: var inicio : Cardinal; Fim : Cardinal; begin inicio := gettickcount; (...) fim := gettickcount; label1.caption := inttostr(fim-inicio)+'ms'; end; o gettickcount retorna o tempo em milisegundos em que o systema foi startado, até o limite de 49,7 dias... - Original Message - From: Omar Marques To: delphi-br@yahoogrupos.com.br delphi-br%40yahoogrupos.com.br Sent: Thursday, July 22, 2010 10:18 AM Subject: [delphi-br] Ref. Timer Milissegundos Salve amigos(as) Delphianos, Estou com uma questão por resolver. Estou precisando colocar um timer que controlará o tempo decorrido do início de uma tarefa em milissegundos. Fiz isto usando um timer com interval = 1, mas está dando refresh direto no componente e além disso, parece que ele corta os outros eventos, por exemplo, tento pressionar um Alt+F que fecha a tela abrindo um menu, mas não funfa quando este timer está enabled. Qual seria a saída ? Thread ? Tem algum exemplo ai ? Alguém já passou por situação semelhante ? Uso Delphi 5 Enterprise Abraço e obrigado a todos. Ats. Omar M. Haddad Analista de Sistemas [As partes desta mensagem que não continham texto foram removidas] [As partes desta mensagem que não continham texto foram removidas] [As partes desta mensagem que não continham texto foram removidas] -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM * Para ver as mensagens antigas, acesse: http://br.groups.yahoo.com/group/delphi-br/messages * Para falar com o moderador, envie um e-mail para: delphi-br-ow...@yahoogrupos.com.br Links do Yahoo! Grupos * Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/delphi-br/ * Para sair deste grupo, envie um e-mail para: delphi-br-unsubscr...@yahoogrupos.com.br * O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html
Re: [Bulk] Re: [delphi-br] Re: Solução para MyConn ection
rodar isso por fora é dar um duplo clique no executável :D desabilitar isso é viável? Eu costumo deixar habilitado, pois, imagine que alguém coloca um try..except..end sem tratamento algum, se a opção estiver desabilitada, mesmo debugando vai ser difícil de encontrar o problema. A sacada é o seguinte, o usuário só vai ver a mensagem showMessage('Existem dados errados! Favor corrigi-los.'), a exceção só aparece dentro da IDE do delphi, entendeu? Em 23 de julho de 2010 08:15, Bruno Lepesqueur brunolbra...@yahoo.com.brescreveu: Obrigado Fabricio, mas me dá pelo menos um empurrão pra eu saber como rodar isso por fora ou como desativar a opção Stop on Delphi Exceptions. Outra coisa... desabilitar isso é viável? Um abraço! ---Mensagem original--- De: Fabricio Colombo Data: 07/23/10 07:45:34 Para: delphi-br@yahoogrupos.com.br delphi-br%40yahoogrupos.com.br Assunto: [Bulk] Re: [delphi-br] Re: Solução para MyConnection Quanto vc está debugando, todas as exceções são mostradas, mesmo as que estão dentro do bloco try..except..end. Se rodar por fora do delphi ou desativar o opção Stop on Delphi Exceptions em Debugger Options\Language Exceptions (Delphi 7), essa mensagem não vai mais aparecer debug. Em 22 de julho de 2010 18:52, brunolbrasil brunolbra...@yahoo.combrunolbrasil%40yahoo.com brescreveu: Pessoal, não ta dando certo! Eu to fazendo assim: 1 try 2 myConnection.Connected := false; 3 myConnection.Server := edit3.Text; //o edit3.text está recebendo um valor que não existe 4 myConnection.Database := edit5.Text; 5 myConnection.Connected := true; //aqui o programa dá o erro 6 ShowMessage('1'); except 7 showMessage('Existem dados errados! Favor corrigi-los.'); 8 close; end; O título da caixa com o erro é o seguinte: Debugger Exception Notification Se eu tirar a linha 5 ele execulta tudo sem problema, mas não faz os comandos do except. Um abraço a todos! --- Em delphi-br@yahoogrupos.com.br delphi-br%40yahoogrupos.com.brdelphi-br% 40yahoogrupos.com.br, Eduardo Silva dos Santos eduardo@... escreveu Usa um try except no código. Att, ... Eduardo Silva dos Santos DRD SISTEMAS (27) 3218-4201 (27) 9961-7095 MSN: eduardo@... Site: http://www.drdsistemas.com.br/ ... Em 22 de julho de 2010 10:24, Bruno Lepesqueur brunolbra...@...escreveu: Galera... estou com um probleminha! Eu inseri um myConnection (componente do myDAC) em meu formulário e criei na tela inicial do programa umas opções pra se mudar as configurações desse componente myConnection (qdo necessário), mas qdo se coloca uma opção que não existe no formulário, tipo um banco de dados que não existe, o sistema gera um erro que eu não gostaria que gerasse! Fiz assim: myConnection .Connected := false; myConnection .Database := edit5.Text; myConnection .Server := edit3.Text; Qdo o usuário digita no edti3.text um valor de Servidor que não existe o sistema gera um erro. A solução que pensei foi a seguinte... Qdo o erro for gerado, ao invés de aparecer o erro, fazer um if para enviar uma msg tipo um showMessage informando ao usuário que aquele Server não existe, mas eu não sei fazer isso! Seria mais ou menos assim: if myconnection.server (192.168.0.1) não existir faça isso... Podem me dar uma dica inicial? Um abraço! [As partes desta mensagem que não continham texto foram removidas] [As partes desta mensagem que não continham texto foram removidas] [As partes desta mensagem que não continham texto foram removidas] -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM [As partes desta mensagem que não continham texto foram removidas] [As partes desta mensagem que não continham texto foram removidas] -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM * Para ver as mensagens antigas, acesse: http://br.groups.yahoo.com/group/delphi-br/messages * Para falar com o moderador, envie um e-mail para: delphi-br-ow...@yahoogrupos.com.br Links do Yahoo! Grupos * Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/delphi-br/ * Para sair deste grupo, envie um e-mail para: delphi-br-unsubscr...@yahoogrupos.com.br * O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html
Re: [delphi-br] Importação ignora 1ª linha do arquivo
Na parte: procedure TfrmSIMNE.CriarDataSet; var i: integer; lLinhaDados: TStringList; begin { Cria o ClientDataSet } fCdsDadosTratados := TClientDataSet.Create(Self); { Define os campos que o ClientDataSet terá } with fCdsDadosTratados.FieldDefs do for i := 1 to 16 do Add(Format('Campo%2.2d', [i]), ftString, 40); como sao os itens do ClientDataSet, entao, faca: for i := 0 to Count(fCdsDadosTratados.FieldDefs)-1 do e por ai vai. *** *** Cláudio Duarte S. de Moraes *** ** Gerente de T. I. *** *** Magazine Sapatos *** ** (82) 2121-0323 *** ** (82) 9101-7609*** ** skype: claudio.dsm** *** --- Em sex, 23/7/10, Ralp Alves Bezerra ral...@gmail.com escreveu: De: Ralp Alves Bezerra ral...@gmail.com Assunto: [delphi-br] Importação ignora 1ª linha do arquivo Para: delphi-br@yahoogrupos.com.br Data: Sexta-feira, 23 de Julho de 2010, 10:11 Nobres colegas, Recentemente tive um problema com a importação de um arquivo. Com a ajuda dos nobres colegas e o envio de um exemplo pelo Walter, consegui sanar o problema. A importação foi realizada. Porém, fazendo uma analise mais detalhada, notei que primeira linha do arquivo nunca é importada. Fica sempre faltando o primeiro registro do arquivo. Estou postando abaixo o código utilizado. Se alguns dos nobres colegas poder me ajudar fico grato. Abraço. unit ufAnaliseDados; interface uses Classes, Forms, DB, Controls, Grids, DBGrids, DBClient, DBXpress, FMTBcd, DBXAutoInc, Provider, SqlExpr, RXCtrls, RXDBCtrl, Buttons, ExtCtrls, XiPanel, Dialogs, JvDialogs, XiProgressBar; type TfrmSIMNE = class(TForm) XiPanel1: TXiPanel; btImportar: TSpeedButton; dbgDados: TDBGrid; DBGrid1: TDBGrid; srcDados: TDataSource; JvOpenDialog1: TJvOpenDialog; Barra: TXiProgressBar; procedure btImportarClick(Sender: TObject); private fDadosTratados: TStringList; fCdsDadosTratados: TClientDataSet; procedure PrepararDados; procedure AnalisarArquivo; procedure CriarDataSet; procedure LiberarDados; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; end; var frmSIMNE: TfrmSIMNE; implementation uses SysUtils, uDM, uImportaProcesso; {$R *.dfm} { TfrmAnaliseDados } procedure TfrmSIMNE.CriarDataSet; var i: integer; lLinhaDados: TStringList; begin { Cria o ClientDataSet } fCdsDadosTratados := TClientDataSet.Create(Self); { Define os campos que o ClientDataSet terá } with fCdsDadosTratados.FieldDefs do for i := 1 to 16 do Add(Format('Campo%2.2d', [i]), ftString, 40); { Cria o ClientDataset com os campos definidos } fCdsDadosTratados.CreateDataSet; { Preenche o ClientDataSet com os dados tratados } lLinhaDados := TStringList.Create; try lLinhaDados.Delimiter := ','; lLinhaDados.QuoteChar := ''; while fDadosTratados.Count 0 do begin fCdsDadosTratados.Append; lLinhaDados.DelimitedText := fDadosTratados[0]; for i := 0 to 15 do fCdsDadosTratados.Fields[i].AsString := lLinhaDados[i]; fDadosTratados.Delete(0); end; finally lLinhaDados.Free; end; { Vincula o ClientDataSet ao DataSource associado ao DBGrid } srcDados.DataSet := fCdsDadosTratados; end; procedure TfrmSIMNE.AnalisarArquivo; var lQtde, lCampos: integer; lArquivo, lLinhaDados: TStringList; sLinhaDados: string; begin If JvOpenDialog1.Execute then Begin lArquivo := TStringList.Create; try lArquivo.LoadFromFile(JvOpenDialog1.FileName); lCampos := 0; lLinhaDados := TStringList.Create; try lLinhaDados.Delimiter := ','; while lArquivo.Count 0 do begin sLinhaDados := lArquivo[0]; lLinhaDados.DelimitedText := sLinhaDados; lLinhaDados.QuoteChar := ''; lQtde := lLinhaDados.Count; if lCampos = 0 then lCampos := lQtde else if lQtde lCampos then raise Exception.CreateFmt( 'Quantidade de campos das linhas de dados é variável.' + sLineBreak + sLineBreak + sLinhaDados + sLineBreak + sLineBreak + '(%d %d).', [lQtde, lCampos]) else fDadosTratados.Add(sLinhaDados); lArquivo.Delete(0); end; finally lLinhaDados.Free; end; finally lArquivo.Free; end;
[delphi-br] Re: Lazarus + zeoslib + Oracle9i.
Muito obrigado amigo! Funcionou perfeitamente. E me desculpem por postar sobre o Lazarus aqui. Mas como são muito parecidos achei que fosse permitido. Programei em Delphi por uns 8 anos e agora estou numa empresa pública que usa somente software livre, por isso fui obrigado a migrar pro Lazarus. Já entrei pra lista dele. Mas agradeco e peço desculpas novamente. --- Em delphi-br@yahoogrupos.com.br, Fabricio Colombo fabricio.colombo@... escreveu Depois de executar o método ExecSql, execute a function RowsAffected, que retorna a quantidade de registros afetados. Normalmente o próprio ExecSql já retorna um inteiro com os registros afetados, quando não retorna, é comum ter uma function ou property para obter essa informação. []s Em 22 de julho de 2010 21:45, Alisson abru...@... escreveu: Pessoal, estou fazendo updates com o ZQuery.ExecSql do Zeos Lib no Lazarus. Gostaria de saber se tem como obter o número de registros efetados pelo update através da Zquery. Obrigado! [As partes desta mensagem que não continham texto foram removidas]
Res: [delphi-br] [CLIENTDATASET 3 TABELAS]
Isso mesmo! -- Eny Trova Urias Somos o que repetitivamente fazemos, portanto, a excelência não é um feito, mas um hábito- Aristóteles De: Magnun Oliveira magnunolive...@gmail.com Para: delphi-br@yahoogrupos.com.br Enviadas: Sexta-feira, 23 de Julho de 2010 8:46:39 Assunto: Re: [delphi-br] [CLIENTDATASET 3 TABELAS] fiquei com a mesma duvida ... estaria no caso, trazendo todos os registros master e todos os details do relacinamento de uma vez só ? tipo fetchall nas duas tabelas ? Em 22 de julho de 2010 23:32, Fabricio Colombo fabricio.colombo@gmail.com escreveu: Não entendi, a idéia não é essa mesma, para cada registro do pai carregar os filhos automaticamente. Exemplifica o que vc constatou. O que ele tava executando desnecessariamente. [As partes desta mensagem que não continham texto foram removidas] [As partes desta mensagem que não continham texto foram removidas]