Fórum dbExpress Interbase 6.5 Delphi 7.0 #316434
17/03/2006
0
Uso os componetes
SQLConnection1 -> SQLDataSet1 -> DataSetProvider1 -> ClientDataSet1 -> DataSource1
ligados conforme manda as boas normas
Tenho tb um DbGrid , um Data Sorce e um Botao
Apresnto os dados faço algumas alteraçoes e quando clico no botão
procedure TForm1.Button1Click(Sender: TObject);
begin
ClientDataSet1.ApplyUpdates(0);
end;
[b:09ef8812a7]me dá o erro abaixo :[/b:09ef8812a7]
[URL=http://imageshack.us][img:09ef8812a7]http://img85.imageshack.us/img85/6292/imagemdbespress19wc.png[/img:09ef8812a7][/URL]
[b:09ef8812a7]e seguindo com a execução do aplicativo , me da o erro[/b:09ef8812a7]
[URL=http://imageshack.us][img:09ef8812a7]http://img116.imageshack.us/img116/8593/imagemdbespress21lo.png[/img:09ef8812a7][/URL]
o problema é que qualquer tabela que vou abrir no Interbase , e depois tento salvar alguns dados <usando a tecnologia DbExpress> , me da este erro....
Usando o IBExpert consigo salvar normalmente as modificaçoes...
Alem disso ja desistalei o Delphi 7.0 e tb o Interbase 6.5 ... E nada
espero muito ajuda . Obtrigado...
Marco Salles
Curtir tópico
+ 0Posts
17/03/2006
Vinicius2k
Verifique a instrução SQL do TSQLDataSet.
Com dbExpress, os nomes dos objetos do banco de dados (tabelas, campos, SPs, etc) devem estar em maiúsculas. Ex:
// erro select campo1, campo2, campo3 from tabela // correto select CAMPO1, CAMPO2, CAMPO3 from TABELA
Gostei + 0
17/03/2006
Marco Salles
é um exemplo do livro do Guinther , da pag14 do seu livro (Programação para banco de dados)
Para se ter uma idéia da simplicidade o SQL esta Assim
SELECT *FROM CUSTOMER
é o exemplo dele do próprio guinther
isto esta me dando danda dor de cabeça , que ja desistalei e reistalei tudo que tinha direito na máquina... E O pior , tinha componentes de terceiros que vou ter o trabalhão de reistala-los
Levei o problema para casa e la tb deu o mesmo erro
o erro acontece , quando eu simplesmente edito qualquer campo e dou um ClientDataSet1.ApplyUpdates(*); *=0 ou -1
verifiquei devido a segunda mensagem que Fala de Chave Primária.. Algo esta reclamando da ausencia desta Chave.. Mas em processo de edição , não teria sentido ele reclamar Ou teria ????
Outra coisa , criei uma Banco de Dados no Interbase , e nele uma tabela muito simples com dois campos apenas
A Dll desta tabela e esta assim
CREATE TABLE TOTENTANDO ( COD_VENDA INTEGER NOT NULL, NOME_ALUNO VARCHAR(30) );
eu então atraves do DbGrid insiro os dados , tomando o cuidado para não ter nenhum registro repetido e logo no primeiro dado quando clico no botão ele da a mensagem de erro escrita la em cima no Primeiro post..
Porem , quando se tem um Banco com Generator e Triger (Que é o caso do CUSTOMER) eu consegui inserir e entrar com os Dados , so que tive que excluir o Campo ´PK´ do Sql , deixando o Banco retornar o Valor para esta Chave...
[b:9cfb56af5d]Mas qy=uando não se tem Generator e ne Triger , como no caso da tabela que criei la em cima , porque eu não esto uconseguindo digitar dados , Mesmo quando insiro todos os valores
corretamente para os Campos (Cod_Venda e Nome_Aluno)[/b:9cfb56af5d]
O Sql neste ultimo Caso tb é Muito simples
SELECT *FROM TOTENTANDO
Onde TOTENTANDO É O nome do minha tabela
[b:9cfb56af5d]Conclusão : So posso incluir algum valor se a chave primaria tiver um Generator.. Não tem sentido isso.. MAs é assim que esta funcionando comigo... As tabelas que eu tenho Chave Primaria com GENERATOR eu uso a query sem definir esse campo e incluo os outros dados no DBGRID , ai não da erro... Mas isto não é muito lógico ou é [/b:9cfb56af5d]
Gostei + 0
17/03/2006
Vinicius2k
O exemplo que você está seguindo pede que você altere os valores padrão de alguma das propriedades do TDataSetProvider?
Se sim, quais?
Não creio que seja um problema relacionado a existir ou não Generator + Trigger e sim existir ou não uma chave primária:
Se sua tabela não tem uma PK e o [b:1d1b6c2286]UpdateMode[/b:1d1b6c2286] do TDataSetProvieder estiver como [b:1d1b6c2286]upWhereKeyOnly[/b:1d1b6c2286], ele não possui uma chave para utilizar no Where, logo, não consegue atualizar...
Não posso afirmar que seja isso... É só um exemplo de como as configurações do TDataSetProvider influenciam no tratamento da informação.
Gostei + 0
17/03/2006
Adriano Santos
Cara estou com o Vinicius2K, acredito que não tenha nada a ver com o fato de ter ou não PK na tabela. Acredito que seja alguma configuração de propriedade mesmo.
Vc tem como me passar o exemplinho que está tendo dificuldade? Queria testar este final de semana. Não sou nenhum expert em DBExpress, mas talvez consiga algo.
flw.
Gostei + 0
18/03/2006
Marco Salles
Então vamos lá
A estrutura que estou usando [color=darkblue:aed0e1e635][b:aed0e1e635]Poxa , acho que todos que puderem testar e comentar o seu resultado , seria otimo..
O Exemplinho é muito fácil e rápido
Não toma nen um minuto.. Mas me ajuda demais[/b:aed0e1e635][/color:aed0e1e635]
A estrutura que to usando é
[color=darkblue:aed0e1e635][b:aed0e1e635]Ta ai ... Rodo a aplicação e façao aqualquer alteração no DbGrid e Clico no Botão... [/b:aed0e1e635][/color:aed0e1e635]
:?: :?: :?: :?: :?: :?: :?:
Faço simplesmente isso e não da certo :cry: :cry: :cry: O que acontece no caso de voce :?: :?: :?:
Por favor , postem os resultados.....
Gostei + 0
18/03/2006
Vinicius2k
Só para me certificar que foi apenas um erro de digitação...
A instrução SQL que você informa está incorreta: falta um espaço entre o ´*´ e o ´FROM´.
Gostei + 0
18/03/2006
Marco Salles
Não , foi erro mesmo .... Não me atinei para isto.. Nunca , nen na epoca do BDE
Parece que esta resolsolvido o problema.... Mas porque da esta diferença tão grande ????Nunca me atinei isto , nen usando o BDE , nunca deu falta desse Espaço .... Agora eu ja não sei se eu colocava ou colcava naturalmente , mas usando BDE isto para mim nunca foi problema
Gostei + 0
18/03/2006
Marco Salles
Sobre esse asunto :
Nomeu caso que estou estudando a[b:464ffd2c75] tabela employye [/b:464ffd2c75]temos uma chave cujo select esta assim:
Select * From CUSTOMER
a biografia manda , manda efetuar os seguintes passos
Com essas medidas , que estão descritas no livro do Guinther pag 15
estamos fazendo uma configuração na clausula WHERE , para ser otimizada.... Isto é importante para processar a instrução de maneira muito mais rápida
:cry: :cry: :cry: :cry:
[color=darkblue:464ffd2c75][b:464ffd2c75]Na hora de executar a aplicação , da erro.. Não consigo atualizar (ClintDataSet.ApplyUpdates(0));[/b:464ffd2c75][/color:464ffd2c75]
[b:464ffd2c75]Alguem ou o proprio Vinicus , consegue enxergar algo nesse processo que não estou fazendo ou deixando de Fazer...[/b:464ffd2c75]
[b:464ffd2c75]O Elefante esta pesado[/b:464ffd2c75]
Se quiserem testar , é importante porque esta tecnologia é a que estará em ´Alfa´ durante os proximos cinco anos.. Temos que começar
Muito obrigado
Gostei + 0
18/03/2006
Martins
E testei, deu tudo certo aqui, sem mensagem de erro nem nada, quer q eu mande o exemplo para vc ver? Se quiser é só me passar o e-mail, não disponibilizo para mais pessoas pq não tenho um server para hospedar o código.
Abraço!
Gostei + 0
18/03/2006
Marco Salles
Se não corrigir este erro , futuramente outras pessaos irão errar também
Eu tenho 99¬ de certeza que esta errado isto aqui
[b:800e7c8393]Voce pode ter os mesmo fields no ClinteDataSert , mas é necessário que se tenha esses Tfilds no SqlQuery.. Pois bem , esta fo ia conclusão que eu cheguei lendo pesquisando e experimentando[/b:800e7c8393]
Gostei + 0
18/03/2006
Martins
E não tive problemas, vc quer q eu te mande o exemplo para vc dá uma olhada, ressalto ainda q o mesmo foi feito em Delphi 6, q é a única versão q tenho nessa máquina.
Valew!!!!
Gostei + 0
18/03/2006
Marco Salles
Porque teoricamente quem ´´e responsável por enviar as instruçoes Sqk para o DataSetProvider é nesse caso O SqlQuery e não o clientDataSet
Se voce consegui realizar isto somente definindo Tfields para o ClinteDataSet Meu email ´´e este :
salhamoda@uol.com.br
Gostei + 0
18/03/2006
Martins
Porque teoricamente quem ´´e responsável por enviar as instruçoes Sqk para o DataSetProvider é nesse caso O SqlQuery e não o clientDataSet
Se voce consegui realizar isto somente definindo Tfields para o ClinteDataSet Meu email ´´e este :
salhamoda@uol.com.br[/quote:d0b4b188fb]
Enviei para seu e-mail, e confirmei aquele ant-spam chato da UOL, hehehe :P
Tá, qualquer coisa, posta aqui.
Valew
Gostei + 0
18/03/2006
Vinicius2k
No modelo proposto, ´quem manda´ nas configurações de TFields é o DataSet (TSQLDataSet/TSQLQuery) e não o TClientDataSet. [b:1e298542e1]As alterações na propriedade ProviderFlags devem ser feitas nos TFields do TSQLQuery/TSQLDataSet[/b:1e298542e1] e você nem precisa de TFields no TClientDataSet para isso (logicamente pode precisar para outras coisas).
1. Adicione todos os TFields no TSQLQuery/TSQLDataSet.
2. Faça as mudanças necessárias ao seu propósito.
3. Então, se quiser, adicione os TFields no TClientDataSet. Você verá que os TFields do TClientDataSet terão herdadas as alterações feitas nos TFields do TSQLDataSet/TSQLQuery.
Correndo o risco de parecer pretencioso por se tratar de um livro do Guinther, se ele não o orienta desta forma, infelizmente, ele está errado.
Gostei + 0
19/03/2006
Marco Salles
Se voce perceber nos meus tópicos anteriores , eu bati o tempo todo nesta tecla.. E O Martins bateu em uma outra direção
Gentilmente , ele me enviou um email com o seu projeto e pude perceber uma diferença entre o que fiz e o que ele fez
No seu exemplo o Martins usou Um [b:945a9e01fb]SqlDataSet[/b:945a9e01fb] em contraMão do [b:945a9e01fb]SqlQuery[/b:945a9e01fb] que estou usando...
De posse disso , para verificar a [b:945a9e01fb]otimização da Instrução Sql[/b:945a9e01fb]([color=darkred:945a9e01fb]Atraves dos ProvinderFlgas)[/color:945a9e01fb] , coloquei Um [color=darkblue:945a9e01fb]SqlMonitor [/color:945a9e01fb] no Projeto e o configurei para me fornecer um [b:945a9e01fb]Arquivo De Log[/b:945a9e01fb]
[color=darkblue:945a9e01fb][b:945a9e01fb]Nesse artigo de Log pude constatar que o Sql esta mesmo OTIMIZADO , sem que se configurrasse os TFILEDS do TSQLDataSet[/b:945a9e01fb][/color:945a9e01fb]
:!: :!: :!: :!:
De posse desta informação ,[b:945a9e01fb] retirei [/b:945a9e01fb]também os TFileds do ClinteDatset e refis a execução , para que un[b:945a9e01fb] Novo [/b:945a9e01fb]Arquivo de log fosse gerado...
:!: :!: :!:
Para minha surpresa , o Arquivo de log gerado também esta[b:945a9e01fb] OTIMIZADO[/b:945a9e01fb]
:idea: :idea: :idea:
[color=darkblue:945a9e01fb][b:945a9e01fb]ORA , sera uma propriedade do TSQLDataSet , que nos bastidores , ja faz esta otimização .... [/b:945a9e01fb][/color:945a9e01fb] :arrow: Não tenho nenhuma biografia a repeito desse comentário, mas fica registrado que [b:945a9e01fb]foi isso que o Arquivo Log me mostrou[/b:945a9e01fb] , quando usei um SQLDataSet , sem fazer nenhuma configuração dos ProviderFlags dos seus DataSets
Veja parte que interresa do Arquivo gerado , usando SqlDataset sem Configurar o ProviderFlags
O mesmo arquivo Gerado usando SQLQuery , sem confighurar Os ProviderFlags
No mais
O livro esta assim sim,
se eu antes de comprar o livro li os vinte artigos do clube delphi sobre dbexpress/DataSnap to na página 15 com esta dificuldade imagine quando passar para um artigo aonde eu não manjar nada , ai que não vou sair do lugar :cry: :cry: :cry: :cry:
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)