Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

cobraxms

SQLClientDataSet

Recommended Posts

Olá pessoal!Gostaria de saber como usar parâmetros em instruções SQL num SQLClientDataSet (da guia dbExpress). Tentei usar como numa Query (da guia BDE), mas não funciona. O SQLClientDataSet não possui a função ParamByName. Tentei usar a propriedade Params do SQLClientDataSet, q possui a função ParamByName; aí, ao invés de usar SQLClientDataSet1.ParamByName('codigo'), usei SQLClientDataSet1.Params.ParamByName('codigo'), mas não deu certo, pois dá o erro "SQLClientDataSet1: Parameter 'codigo' not found" (não entendi, pois estou utilizando o parâmetro :codigo na instrução SQL, além de outros parâmetros).Como posso fazer então?Agradeço desde já.[ ]'s,Ricardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

O procedimento é esse mesmo... Talvez o problema estaja na sintaxe SQL... se você puder posta-la aqui...

 

Sempre escreva o comando SQL todo em MAIUSCULAS, caso contrário a dbExpress pode ter problemas para achar o nome das Tabelas e gerar os comandos de atualização...

 

você pode ainda se referenciar aos Paramertros como:

 

SQLClientDataSet1.Params (onde i = 0 até Params.Count-1)

 

 

Outra dica... o uso do componente SQLClientDataSet não é muito recomendado. Use-o apenas em aplicações pequenas... Prefira usar os componentes:

 

SQLDataSet -> DataSetProvider -> ClientDataSet

 

Na verdade o SQLClientDataSet é como se possuisse esses 3 componentes internamente... Mas usando-os separadamente, você terá um melhor controle das etapas de gravação dos dados, pois há mais eventos disponiveis... além de facilitar uma possivel migração para 3 camadas...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Dopi!

Obrigado pela atenção!

Não há nada de errado na minha instrução SQL:

INSERT INTO Tipo_Aviao (CODTIP, NOMTIP, VALHORATIP) VALUES (:codigo, :nome, :valorhora)

 

O erro é na linha:

SQLClientDataSet1.Params.ParamByName('codigo').AsInteger := Spn_CodTip.Value;

 

Tentei mudar a linha para:

SQLClientDataSet1.Params[0].AsInteger := Spn_CodTip.Value;

 

mas dá o erro "List index out of bounds (0)". Gostaria de saber como fazer então!

 

A aplicação q estou desenvolvendo é pequena (na verdade, é mais pra estudo mesmo); pretendo continuar com o SQLClientDataSet por enqto.

Agradeço por enqto.

 

[ ]'s,

Ricardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Experimente passar todos os campor para MAIUSCULAS e usar o método FindParam....

 

O exemplo abaixo funciona perfeitamente comigo...

          CommandText := 'INSERT INTO "LOJA" '+                          '( CODLOJA, NOMELOJA) '+                   'values (:CODLOJA,:NOMELOJA)';           Params.FindParam('CODLOJA').AsInteger := 1;           Params.FindParam('NOMELOJA').AsString := 'LOJA MATRIZ';           Execute;

Como disse antes o SQLClientDataSet possui 3 componentes dentro dele... não deveria ser necessário... mas experimente chamar "FetchParams" logo após a atribuição da instrução SQL.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Daniel!

Tentei usar FindParam como você disse (ao invés de ParamByName) e coloquei todos os campos e parâmetros em letras maiúsculas, mas o Delphi dá o seguinte erro:

 

Access violation at address 0047D831 in module 'TaxiAereo.exe'. Write of address 00000038. (mesmo usando ou não o FetchParams logo após a atribuição da instrução SQL).

 

Tentei usar o SQLDataSet (parecido com a Query da guia BDE: tem o método ExecSQL e a função ParamByName) e funcionou. O q há de errado com o SQLClientDataSet?

 

No aguardo,

Ricardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hummm... Realmente era para funcionar, deve ser algum Bug... mais o SQLClientDataSet ficou meio que na geladeira... e a Borland recomenda fortemente que ele não seja usado...Qual é a versão do Delphi ? Aplicou todos os Updates disponiveis ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.