Ajuda com um Select.

Delphi

30/12/2006

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.

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

Godzilla_xf

Curtidas 0

Respostas

Godzilla_xf

Godzilla_xf

30/12/2006

up!!!


GOSTEI 0
Emrinfo

Emrinfo

30/12/2006

Bom dia. Tente colocar o nome da tabela em maiusculo.


GOSTEI 0
Godzilla_xf

Godzilla_xf

30/12/2006

Bom dia. Tente colocar o nome da tabela em maiusculo.


vou testar vlw.


GOSTEI 0
Godzilla_xf

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

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 .


GOSTEI 0
Godzilla_xf

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

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


GOSTEI 0
Godzilla_xf

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;

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

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])
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
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).


GOSTEI 0
Godzilla_xf

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])
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
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).


Olá, vou testar e seguir o que vc me falow, assim que testar posto aqui o resultado, blz té +++


GOSTEI 0
Godzilla_xf

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é ++++


GOSTEI 0
POSTAR