Re: [delphi-br] Lazarus + zeoslib + Oracle9i.

2010-07-23 Por tôpico Evandro Siqueira
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.

2010-07-23 Por tôpico Evandro Siqueira
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]

2010-07-23 Por tôpico Fabricio Colombo
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.

2010-07-23 Por tôpico Fabricio Colombo
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

2010-07-23 Por tôpico Fabricio Colombo
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

2010-07-23 Por tôpico Bruno Lepesqueur
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]

2010-07-23 Por tôpico Walter Chagas (Bol)
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

2010-07-23 Por tôpico Ralp Alves Bezerra
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

2010-07-23 Por tôpico Julio Francisco Figueiredo
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

2010-07-23 Por tôpico Dirlei Dionísio
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

2010-07-23 Por tôpico Elazar Dornelles Ceza
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

2010-07-23 Por tôpico Andrei Luís
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

2010-07-23 Por tôpico Walter Chagas (Bol)
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

2010-07-23 Por tôpico Rubem Rocha
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

2010-07-23 Por tôpico Eduardo Suruagy
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]

2010-07-23 Por tôpico Magnun Oliveira
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

2010-07-23 Por tôpico Magnun Oliveira
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

2010-07-23 Por tôpico Fabricio Colombo
 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

2010-07-23 Por tôpico Cláudio Duarte S . Moraes
 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.

2010-07-23 Por tôpico Alisson
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]

2010-07-23 Por tôpico Eny Urias
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]