dbexpress, não consigo usar tabela - read-only

10/09/2004

Não sei trabalhar com o dbexpress, e agora preciso dele para manipular o banco que criei Firebird (que também sou zero-criei no ibexpert).
Utilizei um SQLconnection e um table do dbexpress só que naõ consigo manipular a tabela, quando vou inserir um registro (tb.insert) aparece um erro que a tabela é somente leitura (não tenho como colocar agora o o erro exato). Será que falta o que, usando o mesmo banco com os componentes BDE funciona blz.

Delphi7 Firebird 1.5

Acho que preciso de uma boa apostila de como trabalhar com delphi&firebird atráves dos dbexpress, se alguém puder me indicar um download etc... Obrigado;


Ricna

Respostas

10/09/2004

Vinicius2k

Colega,

O 1º ponto é que vc deve esquecer TxxxTables quando trabalhar com Cliente/Servidor... o dbExpress foi concebido para C/S e a presença da TSQLTable é, digamos, apenas para facilitar um eventual migração... então a manipulação dos dados deve ser feita via TSQLQuery ou TSQLDataSet.

O 2º ponto é que o dbExpress é unidirecioal, isto significa que os únicos métodos que podem ser aplicados sobre o DataSet são First e Next, logo, vc não pode ligá-lo diretamente a um TDataSource -> TDBGrid... para ter um DataSet navegável vc precisa de intermediários...
As opções são :
[b:b31893c3d7]1. TSQLDataSet/TSQLQuery + TDataSetProvider + TClientDataSet :[/b:b31893c3d7] Esta é a artiquetura mais recomendada e também a mais utilizada. O esquema de ligação básico é :
[b:b31893c3d7]TSQLConnection[/b:b31893c3d7] [color=red:b31893c3d7]DriverName, LibraryName, Params e VendorLib[/color:b31893c3d7], todas corretamente configuradas para acessar seu SGBD | + [b:b31893c3d7]TSQLDataSet[/b:b31893c3d7] [color=red:b31893c3d7]CommandText[/color:b31893c3d7], a instrução SQL a ser executada. [color=red:b31893c3d7]SQLConnection[/color:b31893c3d7], apontando para a SQLConnection acima. | + [b:b31893c3d7]TDataSetProvider[/b:b31893c3d7] [color=red:b31893c3d7]DataSet[/color:b31893c3d7], apontando para o SQLDataSet acima. | + [b:b31893c3d7]TClientDataSet[/b:b31893c3d7] [color=red:b31893c3d7]ProviderName[/color:b31893c3d7], apontando para o DataSetProvider acima. | + [b:b31893c3d7]TDataSource[/b:b31893c3d7] [color=red:b31893c3d7]DataSet[/color:b31893c3d7], apontando para o ClientDataSet acima.

[b:b31893c3d7]2. TSQLClientDataSet (Delphi 6) ou TSimpleDataSet (Delphi 7) :[/b:b31893c3d7] Estes componentes são, digamos, 3 em 1 (DataSet + Provider + ClientDataSet) mas não tem todas as propriedades e métodos que vc teria usando os 3 serparadamente...
São componentes ruins, pouco utilizados e não recomendáveis até mesmo pelo pessoal da Borland... Dificuldades frequentes e simples de solucionar com a arquitetura normal, costumam se tornar pavorosas com eles, e muitas vezes, sem solução...

Veja a seção de apostilas do site da revista ClubeDelphi : http://www.clubedelphi.net/apostilas/apostilas.asp

Nos sites www.activedelphi.com.br e www.delphi.eti.br vc tbm encontra material e artigos que podem lhe ajudar a trabalhar com o dbExpress...
A pesquisa do fórum tbm pode lhe ajudar bastante, já que o dbExpress tbm é bastante utilizado, e vc tbm poderá comprovar as considerações que fiz acima sobre as duas formas de acesso...

Espero ter ajudado.
Boa Sorte !
T+


Responder Citar

28/09/2005

Doug_chagas

Colega, O 1º ponto é que vc deve esquecer TxxxTables quando trabalhar com Cliente/Servidor... o dbExpress foi concebido para C/S e a presença da TSQLTable é, digamos, apenas para facilitar um eventual migração... então a manipulação dos dados deve ser feita via TSQLQuery ou TSQLDataSet. O 2º ponto é que o dbExpress é unidirecioal, isto significa que os únicos métodos que podem ser aplicados sobre o DataSet são First e Next, logo, vc não pode ligá-lo diretamente a um TDataSource -> TDBGrid... para ter um DataSet navegável vc precisa de intermediários... As opções são : [b:e569fc9b04]1. TSQLDataSet/TSQLQuery + TDataSetProvider + TClientDataSet :[/b:e569fc9b04] Esta é a artiquetura mais recomendada e também a mais utilizada. O esquema de ligação básico é : [quote:e569fc9b04][b:e569fc9b04]TSQLConnection[/b:e569fc9b04] [color=red:e569fc9b04]DriverName, LibraryName, Params e VendorLib[/color:e569fc9b04], todas corretamente configuradas para acessar seu SGBD | + [b:e569fc9b04]TSQLDataSet[/b:e569fc9b04] [color=red:e569fc9b04]CommandText[/color:e569fc9b04], a instrução SQL a ser executada. [color=red:e569fc9b04]SQLConnection[/color:e569fc9b04], apontando para a SQLConnection acima. | + [b:e569fc9b04]TDataSetProvider[/b:e569fc9b04] [color=red:e569fc9b04]DataSet[/color:e569fc9b04], apontando para o SQLDataSet acima. | + [b:e569fc9b04]TClientDataSet[/b:e569fc9b04] [color=red:e569fc9b04]ProviderName[/color:e569fc9b04], apontando para o DataSetProvider acima. | + [b:e569fc9b04]TDataSource[/b:e569fc9b04] [color=red:e569fc9b04]DataSet[/color:e569fc9b04], apontando para o ClientDataSet acima.

[b:e569fc9b04]2. TSQLClientDataSet (Delphi 6) ou TSimpleDataSet (Delphi 7) :[/b:e569fc9b04] Estes componentes são, digamos, 3 em 1 (DataSet + Provider + ClientDataSet) mas não tem todas as propriedades e métodos que vc teria usando os 3 serparadamente...
São componentes ruins, pouco utilizados e não recomendáveis até mesmo pelo pessoal da Borland... Dificuldades frequentes e simples de solucionar com a arquitetura normal, costumam se tornar pavorosas com eles, e muitas vezes, sem solução...

Veja a seção de apostilas do site da revista ClubeDelphi : http://www.clubedelphi.net/apostilas/apostilas.asp

Nos sites www.activedelphi.com.br e www.delphi.eti.br vc tbm encontra material e artigos que podem lhe ajudar a trabalhar com o dbExpress...
A pesquisa do fórum tbm pode lhe ajudar bastante, já que o dbExpress tbm é bastante utilizado, e vc tbm poderá comprovar as considerações que fiz acima sobre as duas formas de acesso...

Espero ter ajudado.
Boa Sorte !
T+[/quote:e569fc9b04]

Amigo, na propriedade drivername não existe a opção Firebird, devo utilizar o Interbase como dito em outros topicos, ou existe como utilizar driver para o firebird, faze-lo aparecer nesta propriedade?

Obrigado.


Responder Citar

28/09/2005

Vinicius2k

Colega,

Vc pode usar, sem problemas, o driver para Interbase com o Firebird até 1.5.x.
Outros drivers específicos existem, mas o UIB ainda é instável -- http://www.progdigy.com/modules.php?name=UIB -- e o da Upscene -- http://www.upscene.com -- é pago.

T+


Responder Citar

28/09/2005

Davicarrano

no site www.progdigy.com
tem o component de acesso UIB com o driver do Firebird para ibexpress...
eu testei... funcionou beleza... um unico problema eu encontrei...
o sql monitor para monitorar as instruções sql q sao enviadas para o servidor firebird, nao funciona com este drive... alguem sabe porque?


Responder Citar

23/11/2005

Paulo Trajano

Caro amigo Vina, tudo blz?

Estou colocando as dlls midas.dll e dbexpint.dll juntas na pasta da minha aplicvação e dá a msg que ´Falta o DriverName´. Vc disse que funciona direitinho com o driver do interbase e estou usando o FB 1.5. O que está errado?


Responder Citar

24/11/2005

Vinicius2k

Salve Paulinho !

Verifique as propriedades do TSQLConnection:
1. [b:cc633f55dc]DriverName[/b:cc633f55dc] obrigatoriamente precisa estar preenchida com, no seu caso, ´Interbase´ (ou qualquer outro nome que vc desejar, não faz diferença se vc não estiver utilizando conexões nomeadas através do dbxconnections.ini)
2. [b:cc633f55dc]GetDriverFunc[/b:cc633f55dc] preenchida com ´getSQLDriverINTERBASE´
3. [b:cc633f55dc]LibraryName[/b:cc633f55dc] preenchida com ´dbexpint.dll´
4. [b:cc633f55dc]VendorLib[/b:cc633f55dc] preenchida com ´fbclient.dll´ (ou ´gds32.dll´)
5. [b:cc633f55dc]LoadParamsOnConnect[/b:cc633f55dc] setada para ´False´ (se vc não estiver utilizando conexões nomeadas através do dbxconnections.ini).

T+


Responder Citar

24/11/2005

Paulo Trajano

Vlw Vina, eu acabei apagando essas propriedades pq estou usando o dbxconnections.ini mas me esqueci que lá não tinha esses parâmetros. Vou testar agora.

Abraço!!


Responder Citar