| Exibir mensagem anterior :: Exibir próxima mensagem |
| Autor |
Mensagem |
jpauloss Profissional

Registrado: Quinta-Feira, 17 de Agosto de 2006 Mensagens: 600 Localização: Salvador - Bahia
|
Enviada: Ter Mar 04, 2008 8:53 am Assunto: IsEmpty funciona com ClientDataSet? Ou só com SQLDataSet? |
|
|
Estou com essa rotina de importação, vou colocar uma parte | Código: | begin
Application.ProcessMessages;
Readln(farq, linha); //Lê a linha e posiciona o cursor na próxima
Caption := 'Lendo Linha: ' + IntToStr(i) + ' de: ' + IntToStr(pb.Max);
//Buscando pelo Parâmetro codigo, para verificar se já existe na tabela
dm.cdsMaterial.Params.ParamByName('COD_ORDENADO').asString := Trim(Copy(Linha, 1, 6));
dm.cdsMaterial.Open; //Abre o CDS
if dm.cdsMaterial.IsEmpty then //Se Não existir o registro
begin
dm.cdsMaterial.Append; //Insira os dados da linha atual
end
else //Senão, se o registro já existir
dm.cdsMaterial.Edit; //Coloca em modo de edição para atualizar os campos
//Aqui os campos recebem as linhas lidas
dm.cdsMaterialCOD_ORDENADO.AsString := Trim(Copy(Linha, 1, 6));
dm.cdsMaterialDESCRICAO.Value := Trim(Copy(Linha, 8, 30));
dm.cdsMaterialUN.Value := Trim(Copy(Linha, 39, 30));
dm.cdsMaterialPRECO_UNITARIO.AsString := Trim(Copy(Linha, 70, 30));
dm.cdsMaterial.Post; //Salve o registro em memória
//dm.cdsMaterial.ApplyUpdates(0); //Aplica as atualizações em memória no banco //Já está no DM.cdsMaterialAfterPost
dm.cdsMaterial.Close; //Fecha o CDS
Inc(i);
pb.Position := pb.Position + 1;
Next; |
O problema é no dm.cdsMaterial.IsEmpty, quer dizer ele está entendendo que está vazio, mas na realidade está os mesmo dados da tabela MATERIAIS, aí ele deveria pular para o
ELSE
dm.cdsMaterial.Edit;
Só que isso não acontece. O que pode ser? _________________ Escolha um trabalho que você ame e não terás que trabalhar um único dia em sua vida... |
|
| Voltar ao Topo |
|
 |
AnOnImUs.Info Colaborador


Registrado: Quinta-Feira, 23 de Agosto de 2007 Mensagens: 1119 Localização: Goiânia - GO
|
Enviada: Ter Mar 04, 2008 9:02 am Assunto: Re: IsEmpty funciona com ClientDataSet? Ou só com SQLDataSet? |
|
|
As vezes o delphi da umas loucuras.... que so pelo fato de voce modificar a forma como o seu codigo e escrito ele ja passa a interpretar de forma diferente.
tente da uma melhorada em seu codigo... assim tenho certeza que o delphi poderar interpreta-lo da forma desejada.
Obs.: Nao esquecendo que antes de voce passar para o seu client um parametros voce tem que fecha-lo antes.
| Código: |
with dm.cdsMaterial do begin
Close;
Params.ParamByName('COD_ORDENADO').asString := Trim(Copy(Linha, 1, 6));
Open;
if IsEmpty then
Append
else Edit;
end;
|
Qualquer duvida posta ai ! _________________ Reter o conhecimento é promover a ignorância ! |
|
| Voltar ao Topo |
|
 |
DonOctavioDelFlores Colaborador

Registrado: Quarta-Feira, 12 de Setembro de 2007 Mensagens: 2630 Localização: Pra lá de Bagda
|
Enviada: Ter Mar 04, 2008 9:19 am Assunto: |
|
|
| Citação: | | que so pelo fato de voce modificar a forma como o seu codigo e escrito ele ja passa a interpretar de forma diferente. |
haha du vi de o dó... isso non exciste!!!
ele compila o que vc manda compilar, nao tem magica! _________________ “The problem with the world is that everyone is a few drinks behind.” Humphrey Bogart |
|
| Voltar ao Topo |
|
 |
AnOnImUs.Info Colaborador


Registrado: Quinta-Feira, 23 de Agosto de 2007 Mensagens: 1119 Localização: Goiânia - GO
|
Enviada: Ter Mar 04, 2008 9:32 am Assunto: |
|
|
| DonOctavioDelFlores escreveu: | | Citação: | | que so pelo fato de voce modificar a forma como o seu codigo e escrito ele ja passa a interpretar de forma diferente. |
haha du vi de o dó... isso non exciste!!!
ele compila o que vc manda compilar, nao tem magica! |
ANTES....
| Código: |
function TFuncoes.ObterSequencia(Nome_Tabela,Empresa : String):String;
var qCons : TSqlQuery;
Nome_Gen : String;
begin
qCons := TSQLQuery.Create(Nil);
qCons.SQLConnection := Conexao;
Nome_Gen := 'GEN_'+Nome_Tabela+'_'+Empresa;
{verificando se existe}
with qCons do begin
SQL.Add('SELECT * FROM RDB$GENERATORS');
SQL.Add('WHERE');
SQL.Add(' RDB$SYSTEM_FLAG IS NULL');
SQL.Add('AND RDB$GENERATORS.RDB$GENERATOR_NAME = '+QuotedStr(Nome_Gen)+'');
Open;
if IsEmpty then begin
{deve-se então criar o generator}
//StartCommit;
Close;
SQL.Clear;
SQL.Add('INSERT INTO RDB$GENERATORS (RDB$GENERATOR_NAME)');
SQL.Add('VALUES ('+QuotedStr(Nome_Gen)+')');
ExecSQL;
//Commit;
end;
//StartCommit;
Close;
SQL.Clear;
SQL.Add('SELECT GEN_ID('+Nome_Gen+',1) FROM RDB$DATABASE');
Open;
//Commit;
Result := qCons.Fields[0].Text;
end;
end;
|
DEPOIS...
| Código: |
function TFuncoes.ObterSequencia(Nome_Tabela,Empresa : String):String;
var qCons : TSqlQuery;
Nome_Gen : String;
begin
qCons := TSQLQuery.Create(Nil);
qCons.SQLConnection := Conexao;
Nome_Gen := 'GEN_'+Nome_Tabela+'_'+Empresa;
{verificando se existe}
qCons.SQL.Add('SELECT * FROM RDB$GENERATORS');
qCons.SQL.Add('WHERE');
qCons.SQL.Add(' RDB$SYSTEM_FLAG IS NULL');
qCons.SQL.Add('AND RDB$GENERATORS.RDB$GENERATOR_NAME = '+QuotedStr(Nome_Gen)+'');
qCons.Open;
if qCons.IsEmpty then begin
{deve-se então criar o generator}
//StartCommit;
qCons.Close;
qCons.SQL.Clear;
qCons.SQL.Add('INSERT INTO RDB$GENERATORS (RDB$GENERATOR_NAME)');
qCons.SQL.Add('VALUES ('+QuotedStr(Nome_Gen)+')');
qCons.ExecSQL;
//Commit;
end;
//StartCommit;
qCons.Close;
qCons.SQL.Clear;
qCons.SQL.Add('SELECT GEN_ID('+Nome_Gen+',1) FROM RDB$DATABASE');
qCons.Open;
//Commit;
Result := qCons.Fields[0].Text;
end;
|
o mesmo codigo... so que no primeiro utilizei o "WITH"... ele dava erro, ja no segundo e a mesma coisa so que sem o "WITH".... e ele funciona perfeitamente.
me explique melhor por gentileza ? _________________ Reter o conhecimento é promover a ignorância ! |
|
| Voltar ao Topo |
|
 |
DonOctavioDelFlores Colaborador

Registrado: Quarta-Feira, 12 de Setembro de 2007 Mensagens: 2630 Localização: Pra lá de Bagda
|
Enviada: Ter Mar 04, 2008 9:50 am Assunto: |
|
|
é simples...
no with vc deixa os metodos "soltos"...
dae se por acaso, existir uma funcao IsEmpty (pode ser qq outra, qq uma usada dentro do with) em alguma biblioteca declarada na uses, quai ele vai usar a do objeto do with ou a IsEmpty da biblioteca?????
Se vc deixa uma funcao "ambigua" a culpa nao é do compilador, e ele nao vai compilar algo na base do chute... _________________ “The problem with the world is that everyone is a few drinks behind.” Humphrey Bogart |
|
| Voltar ao Topo |
|
 |
AnOnImUs.Info Colaborador


Registrado: Quinta-Feira, 23 de Agosto de 2007 Mensagens: 1119 Localização: Goiânia - GO
|
Enviada: Ter Mar 04, 2008 9:54 am Assunto: |
|
|
| DonOctavioDelFlores escreveu: | é simples...
no with vc deixa os metodos "soltos"...
dae se por acaso, existir uma funcao IsEmpty (pode ser qq outra, qq uma usada dentro do with) em alguma biblioteca declarada na uses, quai ele vai usar a do objeto do with ou a IsEmpty da biblioteca?????
Se vc deixa uma funcao "ambigua" a culpa nao é do compilador, e ele nao vai compilar algo na base do chute... |
entao de acordo com suas palavras, voce esta concordando comigo ! _________________ Reter o conhecimento é promover a ignorância ! |
|
| Voltar ao Topo |
|
 |
DonOctavioDelFlores Colaborador

Registrado: Quarta-Feira, 12 de Setembro de 2007 Mensagens: 2630 Localização: Pra lá de Bagda
|
Enviada: Ter Mar 04, 2008 10:11 am Assunto: |
|
|
| Citação: | | modificar a forma como o seu codigo e escrito ele ja passa a interpretar de forma diferente. |
existe uma diferenca entre como o codigo é escrito, e o que o codigo faz... vc pode modificar milhares de vezes a forma como o codigo é escrito, mas o que o codigo faz é apenas uma coisa, não importa como ele esteja representado...
mas ja tamos desviando o assunto... é coisa de interpretacao... esses dias vi uma frase... "words break if you push them too far" é +- por ai... _________________ “The problem with the world is that everyone is a few drinks behind.” Humphrey Bogart |
|
| Voltar ao Topo |
|
 |
DonOctavioDelFlores Colaborador

Registrado: Quarta-Feira, 12 de Setembro de 2007 Mensagens: 2630 Localização: Pra lá de Bagda
|
Enviada: Ter Mar 04, 2008 10:21 am Assunto: |
|
|
| Citação: | mas na realidade está os mesmo dados da tabela MATERIAIS, aí ele deveria pular para o
ELSE
dm.cdsMaterial.Edit;
Só que isso não acontece. O que pode ser? |
respondendo o topico
se o IsEmpty retorna true é pq é true!!!! já debugou pra ver o recordcount????
mas provavelmente deve ser esse prametro "Trim(Copy(Linha, 1, 6));" que fica invalido e nao retorna nada... _________________ “The problem with the world is that everyone is a few drinks behind.” Humphrey Bogart |
|
| Voltar ao Topo |
|
 |
|