Somente para Feras, a minha dúvida continua, please help

Delphi

14/02/2003

Imagine que tenho BD do ACCESS e duas tabelas
TabCliente
TabPes_Fisica
Na minha TabCliente tenho os seguintes campos:
Cod_Cliente (Chave Primaria)

Cod_Vendedor
Cod_Cidade
Cod_Area
Rota_Cliente

Na TabPes_Fisica os Seguintes Campos
Cod_Cliente (Chave primaria)
Nome_Cliente
CPF
Etc...

Uso um Componete Tquery
Preciso fazer uma query que quando eu entrar com os campos

Cod_Vendedor
Cod_Cidade
Cod_Area
Rota_Cliente

ela me traz os dados das duas tabelas.


Veja abaixo
Quando eu precisa que trazesse somente os dados da tab_Cliente, eu utilizava a instrução abaixo e dava tudo certo.

Dm.Qr_Cliente.SQL.Clear;
Dm.Qr_Cliente.SQL.Add(´Select * From TabCliente ´);
Dm.Qr_Cliente.SQL.Add(´Where Cod_Vendedor =+´´+copy(MkRota.Text,(length(MkRota.Text)-10),2)+´´´);
Dm.Qr_Cliente.SQL.Add(´and Cod_Cidade =+´´+copy(MkRota.Text,(length(MkRota.Text)-7),2)+´´´);
Dm.Qr_Cliente.SQL.Add(´and Cod_Area =+´´+copy(MkRota.Text,(length(MkRota.Text)-5),3)+´´´);
Dm.Qr_Cliente.SQL.Add(´and Rota_Cliente =+´´+copy(MkRota.Text,(length(MkRota.Text)-2),3)+´´´);
Dm.Qr_Cliente.Open;

//No MkRota eu digito a rota inteira exemplo: ´00/11/222/333´ no qual eu copio parte para fazer a consulta acima.
A questão é...
Eu utilizo a chamada acima para fazer uma pesquisa somente em uma tabela, como eu faria para fazer a chamada para duas tabela, vou te dar um exemplo abaixo:

Dm.Qr_Cliente.SQL.Clear;
Dm.Qr_Cliente.SQL.Add(´Select Cli.*, Pfis.* From TabCliente Cli, TabPesFisica Pfis´);
Dm.Qr_Cliente.SQL.Add(´Where Cli.Cod_Cliente = Pfis.Cod_Cliente´);// Aqui eu ligo as duas tabelas, o Cod_Cliente existe na duas tabelas.
Dm.Qr_Cliente.SQL.Add(And Cod_Vendedor =+´´+copy(MkRota.Text,(length(MkRota.Text)-10),2)+´´´);
Dm.Qr_Cliente.SQL.Add(´and Cod_Cidade =+´´+copy(MkRota.Text,(length(MkRota.Text)-7),2)+´´´);
Dm.Qr_Cliente.SQL.Add(´and Cod_Area =+´´+copy(MkRota.Text,(length(MkRota.Text)-5),3)+´´´);
Dm.Qr_Cliente.SQL.Add(´and Rota_Cliente =+´´+copy(MkRota.Text,(length(MkRota.Text)-2),3)+´´´);
Dm.Qr_Cliente.Open;

Infelismente esta, está errada, mais é que quando eu buscasse um registro digitando a rota ele trazia para mim os dados da outra tabela..


Jelves

Jelves

Curtidas 0

Respostas

Anonymous

Anonymous

14/02/2003

Tente isso:



Select * From Clientes C, PessoaFis P Where (C.CodCliente = P CodCliente) and ...ACRESCENTE AQUI AS DEMAIS INTRUCOES DE PESQUISA...


_______________________
Ao omitir idéias estaremos...
...Omitindo idéias !?!?


GOSTEI 0
Jelves

Jelves

14/02/2003

Tudo bem até que a query eu sei fazer, o problema é como fazer esta chamada no delphi....





Tente isso: Select * From Clientes C, PessoaFis P Where (C.CodCliente = P CodCliente) and ...ACRESCENTE AQUI AS DEMAIS INTRUCOES DE PESQUISA... _______________________ Ao omitir idéias estaremos... ...Omitindo idéias !?!?



GOSTEI 0
Anonymous

Anonymous

14/02/2003

Pois bem:

Qual o seu problema - pois não entendi a sua questão ?

_______________________
Ao omitir idéias estaremos omitindo idéias.
Ao troca-las estaremos distribuindo conhecimentos...


GOSTEI 0
Jelves

Jelves

14/02/2003

[quote=´Jairo´]Pois bem:

Qual o seu problema - pois não entendi a sua questão ?


É como colocar está consulta em linhas de código no delphi
eu uso um Tquery

Qr_Clientes
Qr_Pes_Fisica
qdo executo a instrução abaixo no SQL Explorer ela funciona legal
Select Cli.*,Pfis.* From TabCliente Cli, TabPes_Fisica Pfis
Where cli.Cod_Vendedor = ´00´
and cli.Cod_Cidade = ´00´
and cli.Cod_Area = ´000´
and cli.Rota_Cliente = ´111´
and cli.Cod_cliente = Pfis.Cod_cliente

Obrigado


GOSTEI 0
Anonymous

Anonymous

14/02/2003

Var vSql: String
Begin
vSql := ´Select Cli.*,Pfis.* From TabCliente Cli, TabPes_Fisica Pfis ´;
vSql := vSql+´ Where cli.Cod_Vendedor = ´+QuotedStr(´00´)+´and ´;
vSql := vSql+´ cli.Cod_Cidade = ´+QuotedStr(´00´)+´ and cli.Cod_Area ´;
vSql := vSql+´ = ´+QuotedStr(´000´)+´ and cli.Rota_Cliente ´;
vSql := vSql+´ = ´+QuotedStr(´111´)+ and cli.Cod_cliente = ´;
vSql := vSql+´ Pfis.Cod_cliente ´;

Query1.Close;
Query1.Sql.Clear;
Query1.Sql.Add(vSql);
Query1.Open;

Variavel := ´Duvida´;

Ao utilizarmos QuotedStr(Variavel), colocamos aspas simples transformando os valores em String...

Podemos utilizar tambem (Aspas Duplas) - ´´Duvida´´

_________________________________________________________
Ao trocar-mos idéias estaremos expandindo nossos conhecimentos...


GOSTEI 0
Anonymous

Anonymous

14/02/2003

Var vSql: String Begin vSql := ´Select Cli.*,Pfis.* From TabCliente Cli, TabPes_Fisica Pfis ´; vSql := vSql+´ Where cli.Cod_Vendedor = ´+QuotedStr(´00´)+´and ´; vSql := vSql+´ cli.Cod_Cidade = ´+QuotedStr(´00´)+´ and cli.Cod_Area ´; vSql := vSql+´ = ´+QuotedStr(´000´)+´ and cli.Rota_Cliente ´; vSql := vSql+´ = ´+QuotedStr(´111´)+ and cli.Cod_cliente = ´; vSql := vSql+´ Pfis.Cod_cliente ´; Query1.Close; Query1.Sql.Clear; Query1.Sql.Add(vSql); Query1.Open; Variavel := ´Duvida´; Ao utilizarmos QuotedStr(Variavel), colocamos aspas simples transformando os valores em String... Podemos utilizar tambem (Aspas Duplas) - ´´Duvida´´ _________________________________________________________ Ao trocar-mos idéias estaremos expandindo nossos conhecimentos...



Var vSql: String;
begin
vSql := ´Select Cli.*,Pfis.* From TabCliente Cli, TabPes_Fisica Pfis ´;
vSql := vSql+´ Where cli.Cod_Vendedor = ´+QuotedStr(´00´)+´and ´;
vSql := vSql+´ cli.Cod_Cidade = ´+QuotedStr(´00´)+´ and cli.Cod_Area ´;
vSql := vSql+´ = ´+QuotedStr(´000´)+´ and cli.Rota_Cliente ´;
vSql := vSql+´ = ´+QuotedStr(´111´)+´ and cli.Cod_cliente = ´;
vSql := vSql+´ Pfis.Cod_cliente ´;

dm.Qr_Cliente.Close;
dm.Qr_Cliente.Sql.Clear;
dm.Qr_Cliente.Sql.Add(vSql);
dm.Qr_Cliente.Open;
end;

Só ele dá esta mensagem...

´Qr_Cliente: Fild ´Cod_Cliente´ not Found´

Jelves
Obrigado por está me ajudando, devido eu ainda ter muita problema com sintaxe...


GOSTEI 0
POSTAR