cobraxms 0 Denunciar post Postado Janeiro 9, 2005 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
Dopi 0 Denunciar post Postado Janeiro 9, 2005 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
cobraxms 0 Denunciar post Postado Janeiro 15, 2005 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
Dopi 0 Denunciar post Postado Janeiro 18, 2005 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
cobraxms 0 Denunciar post Postado Janeiro 23, 2005 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
Dopi 0 Denunciar post Postado Janeiro 24, 2005 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