Problemas com DBExpress

Delphi

15/06/2006

Ola pessoal!!!!!!!!!!preciso da ajuda de vcs.
Bom meu problema é o segunite.
Estou usando pra conexão com banco Os componentes do dbexpress
SqlConection,SqlDataSet,DataSetProvider,ClienteDataSet e DataSource
Faço tudo certinho: ligo todos no seus devidos lugares configuro tudo direitinho só q, o pipino ta na hora de gravar os dados na tabela.
para gravar eu uso o comando
DM.cdsConvenio.ApplyUpdates(0);
e me é apresentado o seguinte erro:
´Commands out of sync; you can´t rum this command now´
as vezes eu simplesmente apago a query e a refaço todinha e da certo mas eu queria uma explicação logica de como resolver esse problema.
oq eu devo fazer?
Espero q me ajudem


Bruno.barcellos

Bruno.barcellos

Curtidas 0

Respostas

Miuuudo

Miuuudo

15/06/2006

olá amigo...

eu nunca tive esse problema.
mas que delphi você está usando e que banco???

já me deparei com uma centenas de erros do dbexpress e ainda não entendo como alguem pode estar usando essa tecnolagia profissionalmente.

quero simular seu erro pois ainda estou convertendo o sistema para tirar o bde usando o dbexpress.


GOSTEI 0
Paulo

Paulo

15/06/2006

Em parte discordo do miuuudo, pois uso DBExpress na empresa e naum tenho problemas com ele. Tive um problema em casa, mas estava no meu Banco e naum no DBExpress. Agora, qdo as pessoas postarem algo é sempre bom informar o banco, versão do delphi e etc... Isso facilita. Qto ao Bruno, ´as vezes achamosa q tamos certinhos e naum tamo. Eu uso DBX assim, vou simular algoi aqui:
SQLCONNECTION SQLQUERY => Palheta DBExpress
DATASETPROVIDER, CLIENTDATASET E DATASOURCE => Palheta DBAccess.
DATASOURCE>>CLIENTDATASET>>PROVIDER>>SQLQUERY>>CONNECTION. Essa é a lógica usada para a conexão: Digamos que temos uma tabela chamada CLIENTE. Em Design ou RunTime, escrevo minha SQL na SQLQuery assim:

CLIENTDATASET.CLOSE; SQLQUERY.CLOSE; SQLQUERY.SQL.CLEAR; SQLQUERY.SQL.ADD(´SELECT * FROM CLIENTE´); CLIENTDATASET.OPEN

Observe que eu não abri o SQLQUERY com Open, pois não é necessário, já que o conmtrole está em cima do CDS, via PROVIDER. Aí é só trabalhar no CDS.

CDS.APPEND; CDS.POST;

No AfterPost do CDS eu faço

CDS.APPLYUPDATES(-1);


e só. Comigo funciona sem erros.


GOSTEI 0
Miuuudo

Miuuudo

15/06/2006

oi paulo...

eu queria ouvir isso de alguem! (que usa o dbexpress na empresa) realmente gostei.

você poderia me dizer que problemas do banco vc achou e assim...
Como eu falei, converti o sistema aqui da empresa para tirar bde,
vc nunca teve que resolver problemas usado OnGetTableName ?
já usou parâmetros dentro de subselects?
já usou parametros dentro de restrições de joins?
ex.: ´cliente join sistema ON(asda = :asdas)´
nunca teve problemas com UNIONs?

eu tô querendo essa luz a um bom tempo.
para resolver esses problemas tive que fazer alguns ´armengues´.

vc pode dizer algumas ´boas práticas´ para se usar o dbexpress???
essa que vc acabou de citar eu tinha visto mas não resolveu os problemas.

até mais colega...


GOSTEI 0
Adriano Santos

Adriano Santos

15/06/2006

Olá [b:5f21c895cb]miuuudo[/b:5f21c895cb], defendendo o [b:5f21c895cb]Paulo[/b:5f21c895cb] :wink: eu também não tive problemas com DbExpress até hoje. Confesso que no começo tinha um certo preconceito em relação a engenharia dos componentes, porém depois que comecei a desenvolver usando a suíte comecei a enxergar com outros olhos.

Como você pediu, estou lhe recomendando alguns tópicos aqui mesmo do fórum. Não tem exatamente o que quer, mas houveram grandes discussões envolvendo a tecnologia, inclusive com várias perguntas minhas. Aprendi bastante.

Um cara bom no negócio é o [b:5f21c895cb]Vinicius2K[/b:5f21c895cb], tem vários posts dele. Se fosse você acompanharia. Se precisar de mim e souber o que ajudar fico ao dispor.

[quote:5f21c895cb=´Alguns tópicos sobre DBExpress´]
[url=http://forum.clubedelphi.net/viewtopic.php?t=75051]Mestre/Detalhe dbExpress[/url]
[url=http://forum.clubedelphi.net/viewtopic.php?t=75031&start=0&postdays=0&postorder=asc&highlight=&sid=6c3d12b7f2e7a711939b7662cd0834db]dbExpress Interbase 6.5 Delphi 7.0[/url]
[url=http://forum.clubedelphi.net/viewtopic.php?t=58547&highlight=sqldataset+++clientdataset]Transações com DbExpress de forma Bidirecional[/url]
[/quote:5f21c895cb]

Bom divertimento :wink:


GOSTEI 0
Miuuudo

Miuuudo

15/06/2006

muito bom adriano...
discurssões realmente grandes.
não tive tempo de ler com cuidado mas dei uma olhada.
vou ler depois.

vc não teve esses problemas que eu citei acima???

quando você converteu o sistema, você foi em cada unidade e reescreveu o código???

os erros que falei são... simples.

Eu consegui converter o sistema e não tive que ´tocar´ em providerflags.
Até agora tá tudo funcionando.
Muito dos erros que são citados nos foruns se resolve com o assunto do ProviderFlags.
Acredito que os erros que falei não tenham ligação.

Eu estou curioso...
Qual a complexidade do sistema de vcs???
Vocês poderiam testar o que eu falei. Pra ver se é alguma coisa minha.

Ficarei muito grato

adriano
muito obrigado mesmo pela ajuda
fiquei muito interessado nos textos e vou ler com mais cuidado.


GOSTEI 0
Vinicius2k

Vinicius2k

15/06/2006

Colegas,

O primeiro passo para se dar bem com o dbExpress é esquecer todos os vícios que você tem com o BDE. Por exemplo, TTables. Você precisa reaprender a trabalhar, esta é a verdade.

Em segundo lugar você deve compreender que o dbExpress é uma camada de acesso como ADO, IBX, FIB+, Zeos, etc. Apenas isso: Conexão, DataSet, Query, StoredProc e outros acessórios. TDataSetProvider e TClientDataset não são parte integrante do dbExpress e sim da tecnologia Midas. Separe o ´joio do trigo´ e aprenda a utilizá-los separadamente.
O porém, é que no dbExpress, se você desejar um dataset navegável, cache, etc, você precisa do auxílio da Midas.

Em terceiro lugar lembrar que o dbExpress trabalha com um driver. Não adianta reclamar de um problema no dbExpress sendo que o defeito pode estar no driver que você está utilizando. Somente quem partilhar do mesmo SGBD e do mesmo driver com você poderá ajudar-lhe a sanar o problema. Por isso é importante informar nas perguntas qual SGBD e driver estão sendo utilizados.

Como exemplo, o que o colega miuuudo relaciona como um defeitos do dbExpress que o impedem de trabalhar profissionalmene com ele, podem ser problemas com o driver do SQL Server (dbexpmss.dll)... alguma restrição imposta pelo driver ou pelo próprio SGBD, pode ser você mesmo errando na sintaxe da query... podem ser várias coisas, inclusive falha no dbExpress, mas não somente ela.
Para solucionar o problema, você precisa isolá-lo, descobrir quem é o culpado para conseguir resolver, contornar ou, até mesmo desistir...

No caso específico do SQL Server, é bom lembrar que o driver dbExpress dele utiliza a camada ADO nativa do S.O, então, atualizar o MDAC, pode resolver eventuais problemas. Particularmente, eu prefiro utilizar diretamente a camada ADO para trabalhar com SQL Server. Pela facilidade e maior compatibilidade.

Ainda sobre o driver, é bom lembrar de que ele é escrito e certificado para um SGBD em versões específicas. Se está escrito no leia-me que ele é certificado para trabalhar com o SGBD versão X e você insiste em utilizá-lo na versão Y, ou X-SP2, você não pode reclamar concorda? Pode (e deve) buscar um outro driver e não culpar o ´coitado´ do dbExpress por isso.

Só posso dizer a vocês que comecei aprender o dbExpress e também a midas em 2001 e utilizo-os nos projetos desde 2003. Nunca tive problemas em que eu chegasse e pensar que não havia solução. Os problemas que tive, estavam sempre aliados a minha falta de conhecimento do novo, como disse no princípio.

[b:1644388306]bruno.barcellos e miuuudo[/b:1644388306], por favor, informem o SGBD e versão do driver dbExpress que estão utilizando. Se utilizar a Midas, também a versão da midas.dll.

[b:1644388306]bruno.barcellos[/b:1644388306], está executando o Post antes do ApplyUpdates(0)?


GOSTEI 0
Adriano Santos

Adriano Santos

15/06/2006

quando você converteu o sistema, você foi em cada unidade e reescreveu o código???

Na verdade não converti. Quando eu entrei na empresa já haviam passado por este processo. Me disseram que tiveram problemas sim, mas não exatamente com o DBX e sim com o que o Vinicius disse. Falta de conhecimento, problemas com drivers e midas.

Depois que sai da empres passei a estudar a tecnologia e aprender, aprender muito com o Vinicius, Martins e mais uma porrada de nego aqui do fórum. Tem muita gente que manja e dá pra pegar muito macete com os caras. Eu mesmo, como mencionei, se tiver algo que eu saiba como resolver estarei de prontidão. Pode contar.

Colegas, O primeiro passo para se dar bem com o dbExpress é esquecer todos os vícios que você tem com o BDE. Por exemplo, TTables. Você precisa reaprender a trabalhar, esta é a verdade.


Concordo em gênero, número e grau. Precisei rever todos os meus conceitos em relação a tecnologia DBX.


GOSTEI 0
Miuuudo

Miuuudo

15/06/2006

muito bom, muito bom vinicius...

Eu não sabia que cada dll era feita para determinada versão do SGBD.
E nem que o dbexpmss.dll usava o MDAC.

Aqui eu estou usando o SQL Server 7.0 e o SQL Server 2000.
Agente trabalha com todos os bancos, mas o que eu estou mais testando são esses.

A versão da dll é ´9.0.1761.24408´ (dbExpress 2.5). Peguei do delphi 2005 pois resolveu alguns problemas.
A versão do MIDAS é ´7.1.1692.666´.

Mas nas duas versão do SQL Server eles estão funcionando igualmente. Sem problemas.
Como eu já falei, o sistema já esta convertido, só que com alguns armengues que estou tentando melhorar.

Você pode dizer o lugar em que eu vejo a relação dos drivers com a versão do SGBD???

Eu acredito que a maioria dos os erros que citei são dos drivers.
Quanto a não culpar o dbexpress pelos erros dos drivers...
Isso está relacionado. A borland cria o dbExpress e disponibiliza os drivers... eles são o dbexpress. Ou não?

é muito importante saber se vocês conseguiram resolver os erros que citei.

no mais muito obrigado,
estou percebendo uma grande evolução com a ajuda de vocês

parabéns


GOSTEI 0
Miuuudo

Miuuudo

15/06/2006

humm... esqueci
estou usando o delphi 7

e retiro o que disse sobre os drivers
Eu acredito que a maioria dos os erros que citei são dos drivers. Quanto a não culpar o dbexpress pelos erros dos drivers... Isso está relacionado. A borland cria o dbExpress e disponibiliza os drivers... eles são o dbexpress. Ou não?



GOSTEI 0
Miuuudo

Miuuudo

15/06/2006

sobe


GOSTEI 0
Vinicius2k

Vinicius2k

15/06/2006

Não creio que seja ela, mas de qualquer forma a sua versão da Midas.dll não é a última. [url=http://www.distribucon.com/download/midasd7.zip]Download aqui.[/url]

Não posso afirmar, mas o fato de você estar utilizando o driver dbExpress do Delphi 2005, pode estar causando conflitos. Se eu fosse fosse utilizaria o 7.1 e tentaria resolver os possíveis problemas mantendo o conjunto ´em armonia´.

A documentação sobre a compatibilidade do driver, normalmente, está no read-me.txt da versão e dos updates.


GOSTEI 0
POSTAR