Dbexpress, SqlClienteDataset e SimpleDataset

Delphi

20/06/2004

Gente estou me atrapalhando todo com a mudança de Sqlclientedataset e simpledataset, gostaria de saber a forma mais simples de conecção do Banco de dados, sem abordar a parte de rede e sim um programa com acesso a banco de dados local.
deixo a rede pra depois que estiver bem enterado neste novo componente.

Uso FireBird 1.5
Dbexpress
Delphi 7

Agradeço a ajuda ok.


Uoquisala

Uoquisala

Curtidas 0

Respostas

Vinicius2k

Vinicius2k

20/06/2004

Colega,

Veja esta excelente apostila sobre DBX que aborda, inclusive, estes dois componentes... se persistirem dúvidas, poste novavamente, OK?
http://www.clubedelphi.com.br/apostilas/DBExpress.zip

Se me permitir um conselho, não use nenhum dos dois... eu uso, e é a arquitetura mais recomendada, SQLConnection -> SQLDataSet(ou SQLQuery) -> DataSetProvider -> ClientDataSet

Espero ter ajudado...
T+


GOSTEI 0
Uoquisala

Uoquisala

20/06/2004

Ok consegui de uma forma mais fácil e rápida como vc me falou, mais que posição devo tomar sobre codigicação de código para Inserir, excluir, editar campos novos e buscas. devo usar os mesmos métodos que usamos no Dbexpress.



J.R.P.J.


GOSTEI 0
Vinicius2k

Vinicius2k

20/06/2004

A arquitetura que lhe passei não deixa de ser dbExpress, então os métodos são os mesmos... Append; Edit; Delete; ApplyUpdates; etc, Aplicados sobre o ClientDataSet...

Para vc entender bem, encare o SQLClientDataSet (Delphi 6) e o SimpleDataSet (Delphi 7) como um componente 3 em 1 (DataSet + Provider + ClientDataSet)... que foi desenvolvido para facilitar e fazer com que vc use menos componentes para a conexão... porém a própria borland não recomenda o uso e não sei por qual razão, já que nunca vi nenhum colega tendo dificuldades com eles...

T+


GOSTEI 0
Omar Cury

Omar Cury

20/06/2004

Amigos,
Aproveitando o assunto, estou tendo também dificuldades com o SqlSimpleDataSet, por exemplo, nao consigo fazer um select em run-time +/- assim:

SqlSimpleDataSet.DataSet.CommandText.Clear
neste exemplo acima, o delphi nao reconhece o CLEAR do commandText, e nem a função ADD, impossibilitando de limpar a linguagem SQL e adicinar outra no lugar.

outro exemplo

if SqlSimpleDataSet.DataSet.RecordCount > 0 Then
neste outro exemplo, ocorre um erro ´Operação nao suportada´

Caso alguém saiba outro jeito de se fazer isto, me dê uma dica...
Obrigado.


GOSTEI 0
Christian_adriano

Christian_adriano

20/06/2004

Caro Omar Cury,

Pra fazer o q vc esta pretendendo utilize o componente TSQLQuery,

Pois TSqlSimpleDataSet soh ´recebe´ (:=) o comando SQL.

Exe.

With SqlSimpleDataSet do
begin
DataSet.CommandText := ´SELECT , INSERT, UPDATE, DELETE, etc.´;
// Se for um SELECT vc usar apos o comando a cima o ´Open;´
// Caso COntrario vc utiliza o ´Execute;´
end;

Basicamente seria isso.

Espero ter respondido a sua duvida.


GOSTEI 0
Vinicius2k

Vinicius2k

20/06/2004

Omar,

[quote:e53cf57fa6=´Omar Cury´]SqlSimpleDataSet.DataSet.CommandText.Clear
neste exemplo acima, o delphi nao reconhece o CLEAR do commandText, e nem a função ADD, impossibilitando de limpar a linguagem SQL e adicinar outra no lugar.[/quote:e53cf57fa6]
Não utilizo SimpleDataSet, mas a propriedade sua CommandText é similar a CommandText a de todos os componentes DataSet (IBDataSet, SQLDataSet, ADODataSet)... vc não precisa limpar e usar ´Add´, apenas informe a nova string, por exemplo:
SimpleDataSet1.CommandText:= ´select * from clientes´;


[quote:e53cf57fa6=´Omar Cury´]if SqlSimpleDataSet.DataSet.RecordCount > 0 Then
neste outro exemplo, ocorre um erro ´Operação nao suportada´[/quote:e53cf57fa6]
Existem 3 situações onde os componentes DBX geram esta exceção :
1 - se vc estiver acessando uma Stored Procedure
2 - se o sua query (CommandText) possuir parametros
3 - se o sua query (CommandText) contiver um join...
Não há como contornar isso... se precisar contar os registros crie uma query auxiliar com uma instrução :
select count (IDCLIENTE) from CLIENTES where ... (mesmos parametros da query principal)

e para leitura use :
Label1.Caption:= IntToStr(SUA_QUERY.FieldByName(´COUNT´).AsInteger);


Espero ter ajudado...
T+


GOSTEI 0
Omar Cury

Omar Cury

20/06/2004

Agora entendi perfeitamente Vinicius, muito obrigado por sua mensagem sobre o recordCount, eu realmente usava com parametros, ou seja, caso recordCount fosse > 0 eu emitiria a mensagem ´código já cadastrado...´

Agradeço tbem ao Cristian_Adriano.


GOSTEI 0
Vinicius2k

Vinicius2k

20/06/2004

Omar,

No seu caso talvez seja ainda mais simples... ao invés de ler o ´RecordCount´, use o método ´IsEmpty´... se o retorno for false o código já está cadastrado...

T+


GOSTEI 0
Omar Cury

Omar Cury

20/06/2004

muito obrigado pela dica.


GOSTEI 0
POSTAR