Ajuda com um Select.
Olá, gostaria de pedir a ajuda de vc´s para uma probleminha que estou tendo com uma consulta sql. Bem o caso e o seguinte.
tenho duas tabelas
TAB_CLIENTES
COD_CLIENTE
NOME
COD_CIDADE
-----------------------------
TAB_CIDADES
COD_CIDADE
NOME
UF
------------------------------
fiz um select na tabela TAB_CLIENTES da seguinte forma: retirado de um exemplo das video aulas da ClubeDelphi.
é o seguinte a consulta sql esta correta, por que eu testei no IBExpert ela funciona inclusive se eu alterar alguns dados desde que naum sejam os dois campos que são criados a partir da subquery. Porem quando eu vou para o delphi, e monto a estrura:
SQLCONNECTION -> SQLDATASET -> DATASETPROVIDER -> CLIENTDATASET -> DATASOURCE
ela fas consultas normalmente, porem INSERT, DELETE, APPEND não funciona de forma alguma.
Quando eu tento fazer um insert, no momento que eu passo o parametro [b:cc425b0415]ClientDataSet1.ApplyUpdates(0)[/b:cc425b0415] ele me retorna o erro [b:cc425b0415]Table unknown tab_cidades[/b:cc425b0415] e não aplica os dados no DB. Também ja configurei os [b:cc425b0415]ProviderFlags[/b:cc425b0415] dos campos da [b:cc425b0415]SqlDataSet[/b:cc425b0415] mas não da certo. Gostaria de pedir se alguem pode me ajudar, desde ja agradeço.
tenho duas tabelas
TAB_CLIENTES
COD_CLIENTE
NOME
COD_CIDADE
-----------------------------
TAB_CIDADES
COD_CIDADE
NOME
UF
------------------------------
fiz um select na tabela TAB_CLIENTES da seguinte forma: retirado de um exemplo das video aulas da ClubeDelphi.
select tc.NOME, tc.ENDERECO, tc.BAIRRO, tc.COD_CIDADE,
(select tcd.nome from tab_cidades tcd where tcd.cod_cidade = tc.cod_cidade) as Cidade,
(select tcd.UF from tab_cidades tcd where tcd.cod_cidade = tc.cod_cidade) as UF, tc.CEP,
tc.FONE, tc.CPF_CNPJ, tc.INSCRICAO_E, tc.INSCRICAO_M from TAB_CLIENTES tc
where tc.cod_cliente = :ID_CLIENTE
é o seguinte a consulta sql esta correta, por que eu testei no IBExpert ela funciona inclusive se eu alterar alguns dados desde que naum sejam os dois campos que são criados a partir da subquery. Porem quando eu vou para o delphi, e monto a estrura:
SQLCONNECTION -> SQLDATASET -> DATASETPROVIDER -> CLIENTDATASET -> DATASOURCE
ela fas consultas normalmente, porem INSERT, DELETE, APPEND não funciona de forma alguma.
Quando eu tento fazer um insert, no momento que eu passo o parametro [b:cc425b0415]ClientDataSet1.ApplyUpdates(0)[/b:cc425b0415] ele me retorna o erro [b:cc425b0415]Table unknown tab_cidades[/b:cc425b0415] e não aplica os dados no DB. Também ja configurei os [b:cc425b0415]ProviderFlags[/b:cc425b0415] dos campos da [b:cc425b0415]SqlDataSet[/b:cc425b0415] mas não da certo. Gostaria de pedir se alguem pode me ajudar, desde ja agradeço.
Godzilla_xf
Curtidas 0
Respostas
Godzilla_xf
30/12/2006
up!!!
GOSTEI 0
Emrinfo
30/12/2006
Bom dia. Tente colocar o nome da tabela em maiusculo.
GOSTEI 0
Godzilla_xf
30/12/2006
Bom dia. Tente colocar o nome da tabela em maiusculo.
vou testar vlw.
GOSTEI 0
Godzilla_xf
30/12/2006
[quote:fa00308be9=´emrinfo´]Bom dia. Tente colocar o nome da tabela em maiusculo.
vou testar vlw.[/quote:fa00308be9]
Continua o mesmo problema.
GOSTEI 0
Emrinfo
30/12/2006
Bom dia. Eu faco o seguinte:
No DataSetProvider eu coloco TRUE para (poAutoRefresh, poPropagateChange e po AllowCommandText).
E na hora de gravar,
cds_Cliente.Post;
cds_Cliente.ApplyUpdates(0);
if cds_Cliente.ApplyUpdates(0) <> 0 then
begin
Application.MessageBox(´Não foi possível gravar o registro!!´, ´Controle Fiscal´, MB_ICONERROR+MB_OK);
cds_Cliente.CancelUpdates;
end;
Eu tive este problema se no banco é case sensitive ainda mais se tiver usando o Command Text, defina sempre no banco em maiusculo, porque no Ibexpert irá funcionar mas no Delphi nao, e na select sempre coloque a tabela em maiusculo no SQLDATASET e no CLIENTDATASET .
No DataSetProvider eu coloco TRUE para (poAutoRefresh, poPropagateChange e po AllowCommandText).
E na hora de gravar,
cds_Cliente.Post;
cds_Cliente.ApplyUpdates(0);
if cds_Cliente.ApplyUpdates(0) <> 0 then
begin
Application.MessageBox(´Não foi possível gravar o registro!!´, ´Controle Fiscal´, MB_ICONERROR+MB_OK);
cds_Cliente.CancelUpdates;
end;
Eu tive este problema se no banco é case sensitive ainda mais se tiver usando o Command Text, defina sempre no banco em maiusculo, porque no Ibexpert irá funcionar mas no Delphi nao, e na select sempre coloque a tabela em maiusculo no SQLDATASET e no CLIENTDATASET .
GOSTEI 0
Godzilla_xf
30/12/2006
Bom dia. Eu faco o seguinte:
No DataSetProvider eu coloco TRUE para (poAutoRefresh, poPropagateChange e po AllowCommandText).
E na hora de gravar,
cds_Cliente.Post;
cds_Cliente.ApplyUpdates(0);
if cds_Cliente.ApplyUpdates(0) <> 0 then
begin
Application.MessageBox(´Não foi possível gravar o registro!!´, ´Controle Fiscal´, MB_ICONERROR+MB_OK);
cds_Cliente.CancelUpdates;
end;
Eu tive este problema se no banco é case sensitive ainda mais se tiver usando o Command Text, defina sempre no banco em maiusculo, porque no Ibexpert irá funcionar mas no Delphi nao, e na select sempre coloque a tabela em maiusculo no SQLDATASET e no CLIENTDATASET .
Vlw, vou testar e posto se deu certo Ok. té +++ e obrigado.
GOSTEI 0
Macario
30/12/2006
Olá.
Você citou que ja configurou os providerflags dos campos, então não esqueça de setar a propriedade [b:0401e0115b]UpdateMode[/b:0401e0115b] do DSP para [b:0401e0115b]upWhereKeyOnly[/b:0401e0115b].
Outro ponto, o que compôe o seu ambiente de trabalho(Delphi, banco, driver,etc)?
Esta sua instrução poderia ser simplificada fazendo uso de inner join.
[]´s
Você citou que ja configurou os providerflags dos campos, então não esqueça de setar a propriedade [b:0401e0115b]UpdateMode[/b:0401e0115b] do DSP para [b:0401e0115b]upWhereKeyOnly[/b:0401e0115b].
Outro ponto, o que compôe o seu ambiente de trabalho(Delphi, banco, driver,etc)?
Esta sua instrução poderia ser simplificada fazendo uso de inner join.
[]´s
GOSTEI 0
Godzilla_xf
30/12/2006
Olá, tentei todas as opções que vc´s me indicaram e nada num da nada, coloquei uma janela de ReconcileError, e ela me retorna a mensagem de erro seguinte, no momento que eu vou dar um applyupdates;
e num sei o que esta errado, fiz com [b:0945e6f7df]inner join[/b:0945e6f7df] e tbm da o mesmo erro.
As Sql´s estao aqui:
o Inner Join
este eu num sei se esta certo, mas a seleção quando passado um valor para o parametro [b:0945e6f7df]COD_CLIENTE[/b:0945e6f7df] retorna os valores desejados. té ++++
Database Server Error: Table unknown
tab_clientes
At line 1, column 8
e num sei o que esta errado, fiz com [b:0945e6f7df]inner join[/b:0945e6f7df] e tbm da o mesmo erro.
As Sql´s estao aqui:
select tc.COD_CLIENTE, tc.NOME, tc.ENDERECO, tc.BAIRRO, tc.COD_CIDADE,
(select tcd.nome from tab_cidades tcd where tcd.cod_cidade = tc.cod_cidade) as Cidade,
(select tcd.UF from TAB_CIDADES tcd where tcd.cod_cidade = tc.cod_cidade) as UF, tc.CEP,
tc.FONE, tc.CPF_CNPJ, tc.INSCRICAO_E, tc.INSCRICAO_M from TAB_CLIENTES tc
where tc.cod_cliente = :ID_CLIENTE
o Inner Join
select tc.cod_cliente, tc.nome, tc.endereco, tc.bairro, tc.cod_cidade, cid.nome as Cidade, cid.uf, tc.cep,
tc.fone, tc.cpf_cnpj, tc.inscricao_e, tc.inscricao_m from tab_clientes tc
inner join tab_cidades cid on cid.cod_cidade = tc.cod_cidade
where tc.cod_cliente = :cod_cliente
este eu num sei se esta certo, mas a seleção quando passado um valor para o parametro [b:0945e6f7df]COD_CLIENTE[/b:0945e6f7df] retorna os valores desejados. té ++++
GOSTEI 0
Emerson Nascimento
30/12/2006
tomando como base a seguinte instrução (em MAIÚSCULAS, como já havia sido dito pelo colega [b:f75adbd485]emrinfo[/b:f75adbd485])
você precisa persistir os campos e informar ao dbExpress que os campos da tabela TAB_CIDADES NÃO devem ser manipulados (atribua [pfHidden] à propriedade ProviderFlags desses campos).
SELECT TC.COD_CLIENTE, TC.NOME, TC.ENDERECO, TC.BAIRRO, TC.COD_CIDADE, CID.NOME AS cIDADE, CID.UF, TC.CEP, TC.FONE, TC.CPF_CNPJ, TC.INSCRICAO_E, TC.INSCRICAO_M FROM TAB_CLIENTES TC INNER JOIN TAB_CIDADES CID ON (CID.COD_CIDADE = TC.COD_CIDADE) WHERE TC.COD_CLIENTE = :COD_CLIENTE
GOSTEI 0
Godzilla_xf
30/12/2006
tomando como base a seguinte instrução (em MAIÚSCULAS, como já havia sido dito pelo colega [b:629874e33a]emrinfo[/b:629874e33a])
você precisa persistir os campos e informar ao dbExpress que os campos da tabela TAB_CIDADES NÃO devem ser manipulados (atribua [pfHidden] à propriedade ProviderFlags desses campos).
SELECT TC.COD_CLIENTE, TC.NOME, TC.ENDERECO, TC.BAIRRO, TC.COD_CIDADE, CID.NOME AS cIDADE, CID.UF, TC.CEP, TC.FONE, TC.CPF_CNPJ, TC.INSCRICAO_E, TC.INSCRICAO_M FROM TAB_CLIENTES TC INNER JOIN TAB_CIDADES CID ON (CID.COD_CIDADE = TC.COD_CIDADE) WHERE TC.COD_CLIENTE = :COD_CLIENTE
Olá, vou testar e seguir o que vc me falow, assim que testar posto aqui o resultado, blz té +++
GOSTEI 0
Godzilla_xf
30/12/2006
Olá, gostaria de dizer a todos que me ajudaram que consegui resolver o problema da forma como foi dito acima:
Coloquei toda a instrução SQL em MAIUSCULO.
Agradeço a todos pela ajuda, muito obrigado, e até ++++
Coloquei toda a instrução SQL em MAIUSCULO.
Agradeço a todos pela ajuda, muito obrigado, e até ++++
GOSTEI 0