Como Criar parametro em tempo de execução no ClientDataSet
Estou tentando criar parametro no ClientDataSet com a seguinte codigo:
ClientDataSet .Close;
ClientDataSet .SQL.Text := ´ SELECT * FROM FORNECEDORES ´+
´ WHERE UPPER(Nome_Forn) LIKE :parFORNECEDOR ´;
ClientDataSet .ParamByName(´parFORNECEDOR´).AsString := Edit1.Text + ´¬´;
ClientDataSet .Open;
da erro quando executo
ClientDataSet .Close;
ClientDataSet .SQL.Text := ´ SELECT * FROM FORNECEDORES ´+
´ WHERE UPPER(Nome_Forn) LIKE :parFORNECEDOR ´;
ClientDataSet .ParamByName(´parFORNECEDOR´).AsString := Edit1.Text + ´¬´;
ClientDataSet .Open;
da erro quando executo
Leorez
Curtidas 0
Respostas
Bon Jovi
01/02/2005
Antes de setar os parâmetros chame o método FetchParams:
//ClientDataSet1 estando conectado ao Provider->Query->Connection.
ClientDataSet1.[b:bd6656386b]FetchParams[/b:bd6656386b];
ClientDataSet1.Params.ParamByName(´parFORNECEDOR´).ParamType := ptInput;
ClientDataSet1.Params.ParamByName(´parFORNECEDOR´).DataType := ftString;
ClientDataSet1.Params.ParamByName(´parFORNECEDOR´).AsString := ´xxx´;
//pode dar open agora...
------------------------------------------------------
Talvez nao precise pro seu caso, mas pra realmente criar na mãozona vc pode usar CreateParam:
ClientDataSet1.Params.CreateParam(ftString, ´parFORNECEDOR´, ptInput);
--------------------
Shaman forever
--------------------
//ClientDataSet1 estando conectado ao Provider->Query->Connection.
ClientDataSet1.[b:bd6656386b]FetchParams[/b:bd6656386b];
ClientDataSet1.Params.ParamByName(´parFORNECEDOR´).ParamType := ptInput;
ClientDataSet1.Params.ParamByName(´parFORNECEDOR´).DataType := ftString;
ClientDataSet1.Params.ParamByName(´parFORNECEDOR´).AsString := ´xxx´;
//pode dar open agora...
------------------------------------------------------
Talvez nao precise pro seu caso, mas pra realmente criar na mãozona vc pode usar CreateParam:
ClientDataSet1.Params.CreateParam(ftString, ´parFORNECEDOR´, ptInput);
--------------------
Shaman forever
--------------------
GOSTEI 0
Macario
01/02/2005
Ola.
Estou tento dificuldade em utilizar parametros em runtime.
Tenho a seguinte instrucao ´fixa´ dentro do SQLDataSet:
Onde CAMPO e do tipo varchar.
Mas agora preciso passar este comando em runtime, no evento BeforeOpen do SQLDataSet.
Ocorre o seguinte erro: [b:a8bce215f8]No valur for parameter PARAMCAMPO[/b:a8bce215f8]
Quando efetuo o Open do ClientDataset ligado ao SQLDataSet com a instrucao.
Ja tentei o meto CreateParam mas nao obtive sucesso.
Alguem teria um exemplo funcional?
Grato. :roll:
Estou tento dificuldade em utilizar parametros em runtime.
Tenho a seguinte instrucao ´fixa´ dentro do SQLDataSet:
select * from TABELA where CAMPO = :PARAMCAMPO
Onde CAMPO e do tipo varchar.
Mas agora preciso passar este comando em runtime, no evento BeforeOpen do SQLDataSet.
Ocorre o seguinte erro: [b:a8bce215f8]No valur for parameter PARAMCAMPO[/b:a8bce215f8]
Quando efetuo o Open do ClientDataset ligado ao SQLDataSet com a instrucao.
Ja tentei o meto CreateParam mas nao obtive sucesso.
Alguem teria um exemplo funcional?
Grato. :roll:
GOSTEI 0
Brunolspp
01/02/2005
Exemplos de utilização de ClientDataSet
Inclusive com criação dinamica de sql e parametrização de comandos em:
http://cc.borland.com/Author.aspx?ID=795118
No mais, estou as ordens
Abração
Inclusive com criação dinamica de sql e parametrização de comandos em:
http://cc.borland.com/Author.aspx?ID=795118
No mais, estou as ordens
Abração
GOSTEI 0
Marco Salles
01/02/2005
A dica do macario , aparentemente resolveria o problema ... Com um detalhe... Ela deve ser processada com o clientDataset Fechado...Isto é:
também acho que isto deve ser feito com o clientDatset Fechado
Fechar o clientDataset
ClientDataSet1.FetchParams;
abrir o clientDataset
Ja tentei o meto CreateParam mas nao obtive sucesso.
também acho que isto deve ser feito com o clientDatset Fechado
GOSTEI 0
Macario
01/02/2005
Ola.
Detalhando melhor o meu problema.
[u:36ca53701c]Exemplo 1[/u:36ca53701c]
O exemplo 1 trata de uma situação normal onde esta instrução esta no componente TSQLDataSet ja em tempo de projeto. E as duas tabelas encontram-se no mesmo database.
No codigo delphi fica.
[u:36ca53701c]Exemplo 2[/u:36ca53701c]
O exemplo 2 trata de uma situação onde ja nao posso mais deixar a instrução estatica no componente SQLDataSet, pois apenas em tempo de execução é passado o nome dos Bancos, As tabelas podem estar em posições inversas(Venda em BancoB e Cliente em BancoA).
Uso este codigo em varios pontos do sistema
Agora nao estou conseguindo manter desta forma por que nao consigo trabalhar com o parametro.
Estou tentando criar os parametros no BeforeOpen do SQLDataSet esta forma é a correta?
No BeforeOpen do SQLDataSet tenho o seguinte codigo:
Detalhando melhor o meu problema.
[u:36ca53701c]Exemplo 1[/u:36ca53701c]
Banco A:
+ TabelaVenda
+ TabelaCliente
select V.Nota, C.NomeCli, sum(V.Venda) as Total from TABELAVENDA V
inner join TABELACLIENTE C on (V.CODCLI = C.CODCLI)
where V.CODCLI = :CODCLI
O exemplo 1 trata de uma situação normal onde esta instrução esta no componente TSQLDataSet ja em tempo de projeto. E as duas tabelas encontram-se no mesmo database.
No codigo delphi fica.
DM.cdsConsultaVenda.close; DM.cdsConsultaVenda.params.parambyname(´CODCLI´).AsInteger := iCodigo; DM.cdsConsultaVenda.Open;
[u:36ca53701c]Exemplo 2[/u:36ca53701c]
Banco A:
+ TabelaVenda
Banco B
+ TabelaCliente
select V.Nota, C.NomeCli, sum(V.Venda) as Total from BANCOA.dbo.TABELAVENDA V
inner join BANCOB.dbo.TABELACLIENTE C on (V.CODCLI = C.CODCLI)
where V.CODCLI = :CODCLI
O exemplo 2 trata de uma situação onde ja nao posso mais deixar a instrução estatica no componente SQLDataSet, pois apenas em tempo de execução é passado o nome dos Bancos, As tabelas podem estar em posições inversas(Venda em BancoB e Cliente em BancoA).
Uso este codigo em varios pontos do sistema
DM.cdsConsultaVenda.close; DM.cdsConsultaVenda.params.parambyname(´CODCLI´).AsInteger := iCodigo; DM.cdsConsultaVenda.Open;
Agora nao estou conseguindo manter desta forma por que nao consigo trabalhar com o parametro.
Estou tentando criar os parametros no BeforeOpen do SQLDataSet esta forma é a correta?
No BeforeOpen do SQLDataSet tenho o seguinte codigo:
var iValueParam : integer; begin iValueParam := cdsConsultaVenda.params.parambyname(´CODCLI´).AsInteger; sdsConsultaVenda.CommandText := ´select V.Nota, C.NomeCli, sum(V.Venda) as Total from ´+[color=red]sDataBaseDBOTabelaVEnda[/color]+´ V inner join ´+[color=red]sDataBaseDBOTabelaCliente[/color]+´ C on (V.CODCLI = C.CODCLI) where V.CODCLI = :CODCLI´ if(Agora devo criar o parametro no SQLDataSet ou no ClientDataSet) then sdsConsultaVenda.params.CreateParam(ftInteger, ´CODCLI´, ptInPut); else cdsConsultaVenda.params.CreateParam(ftInteger, ´CODCLI´, ptInPut); end;
GOSTEI 0
Brunolspp
01/02/2005
pq vc não cria o comando td e passa pela propriedade commandtext do clientdataset, é uma solução imediata, talves não das melhores.
para fazer isso e necessario q a propriedade allowcommandtext do datasetprovider esteja habilitada.
dai vc faria td pelo clientdataset mesmo, tomando cuidado de modificar o sql somente no where e não nos campos retornados se o seu clientdataset tiver os tfields ja tipificados.
no mais, estou as ordens
http://cc.borland.com/Author.aspx?ID=795118
Abração
para fazer isso e necessario q a propriedade allowcommandtext do datasetprovider esteja habilitada.
dai vc faria td pelo clientdataset mesmo, tomando cuidado de modificar o sql somente no where e não nos campos retornados se o seu clientdataset tiver os tfields ja tipificados.
no mais, estou as ordens
http://cc.borland.com/Author.aspx?ID=795118
Abração
GOSTEI 0
Macario
01/02/2005
Ola Bruno.
Entao seria uma saida passar tudo diretamente, mas no meu caso torna-se uma grande alteração dentro do sistema(um ERP com varios modulos) .
Entao seria uma saida passar tudo diretamente, mas no meu caso torna-se uma grande alteração dentro do sistema(um ERP com varios modulos) .
GOSTEI 0
Marco Salles
01/02/2005
independemente do que voce esta fazendo a dica do Bon Jovi deve resolver.. é claro que esses parametros ja deveria ter sido definidos previamente na TsqlQuery..
Esses parametros ja estão previamente definidos ????
Esses parametros ja estão previamente definidos ????
Agora , ao se usar o ComadText , deve-se usar cds.Execute ao inves do tradicional cds.open
e outra , ao se usar o qry.SQL.CommaText deve-se usar o
qry.ExecSQL(false) ao inves do qry.OPen
GOSTEI 0
Macario
01/02/2005
[quote:2fec42ee69=´Marco Salles´]
Esses parametros ja estão previamente definidos ????
[/quote:2fec42ee69]
Sim como mencionei estao no CLientDataSet.
Esses parametros ja estão previamente definidos ????
[/quote:2fec42ee69]
Sim como mencionei estao no CLientDataSet.
GOSTEI 0