Fórum DbGrid com duas tabela do Access #370467

14/05/2009

0

Bom dia...


Estou utilizando um banco (Access) com duas tabela relacionadas...
TblaUsuarios // Tabela1 Campo Nome está relacionada com a tabela2
TblaEnderecos // Tabela2


TEnho que apresentar em um DbGrid o Nome (Tabela1 - CAmpo Nome) e seu respectivo Endereço(Tabela2 - Campo endereco).

Na Propriedade FielName da coluna Endereço do DbGrid inseri Nome.Endereco
Mas não esta retornando seu endereço.....

Como posso solucionar isto?
Existe alguma magica para fazer os relacionamentos(no Access)?


Grato...


Freed

Freed

Responder

Posts

14/05/2009

.lg.

O relacionamento é feito atravez de SQL.

Qual o relacionamento entre suas tabelas!? (chave primaria e estrangeira)
Use um [b:5ca83241f6]INNER JOIN[/b:5ca83241f6] que você vai conseguir relacionar os dados.

Qlqr coisa posta ae, que damos o help.
att,
.lg.


Responder

Gostei + 0

15/05/2009

Freed

Estudei alguns exemplos da net mas não consegui..

Banco = Access
TblaUsuarios = Tabela1
Id
Nome
Sexo
Idade

TblaEnderecos = Tabela2
Id
Rua
Cidade
Estado

Os campos ´Id´ das duas tabelas estão relacionadas

With ADOQuery1 do begin
            Close;
            SQL.Clear;
            SQL.Add(´select TblaUsuarios.*, TblaEnderecos .*);
            SQL.Add(´ from TblaUsuarios );
            SQL.Add(´inner join TblaEnderecos ) ;
            SQL.Add(´on TblaUsuarios .Id= TblaEnderecos .Cidade);
            open;
end;

Na Propriedade FielName da coluna Endereço do DbGrid inseri TblaUsuarios .Id e nas demais colunas inseri apenas Nome, Sexo,Idade, e retornou os valores...


REsultado desejado:
Apresente no DbGrid...
Nome | Sexo | Idade | Cidade


Grato.


Responder

Gostei + 0

15/05/2009

.lg.

vamos corrigir seu SQL:
SELECT US.NOME, US.SEXO, US.IDADE,
       EN.RUA, EN.CIDADE, EN.ESTADO
  FROM TBLAUSUARIOS US
       INNER JOIN TBLAENDERECOS EN ON (EN.ID = US.ID)
 ORDER BY US.NOME

isso deve lhe ajudar. Desculpe o Caps. É costume do padrão que adoto.
:wink:
qualquer dúvida ou problema postae.

Abraços,
.lg.


Responder

Gostei + 0

15/05/2009

.lg.

desculpe. É a pressa e como já disseram, ´é esse site que não permite editar´.

Use o SQL dessa forma. Quando vcê for puchar as colunas no DBGrid, puxe todas e exclua as que não lhe interessar aparecer.

+1x
Att,
.lg.


Responder

Gostei + 0

15/05/2009

Freed

Agradeço pela ajuda .lg. ,o problema foi solucionado com seu código..

Vou aproveitar este tópico e postar mais uma dúvida.. (Apenas para estudo..)

tenho duas tabelas...

TblaEstoqueFrutas // Tabela1

Id - Chave primária
CodFruta
Qt
ValorUnitario

TblaCadastroFrutas // Tabela2

CodFruta
Fruta

O ´CodFruta´ esta relacionado entre as duas tabelas (Access)

Gostaria de apresentar em um DbGrid:

CodFruta | Fruta | QtTotal | PrecoMedio | Total

1º - As frutas não se repitam EX: 1 linha para Laranja
2º - O nome da fruta esta na tabela2 (TblaCadastroFrutas)
3º - QtTotal não tem campo no banco, mas retorne a soma das frutas de mesma espécie EX: some todos os registros de laranja..
4º - PrecoMedio não tem campo no banco, mas retorne o preço médio (Ignorar a quantidade) EX: ValorUnitario=3 + ValorUnitario=5 PrecoMedio = 4
5º - Total não tem campo no banco, mas retorne o total. EX: QtTotal * PrecoMedio = Total


Se tivesem que fazer algo parecido como fariam?

Grato..


Responder

Gostei + 0

15/05/2009

.lg.

Você precisa estudar um pouquinho SQL. Tenta pegar alguma apostila pra vc estudar funções básicas de SQL, agrupamento, etc...

Minha única questão* é se o ´preço médio´ que vc quer, se é uma média do preço.

Se for talvez isso ajude:
SELECT CF.CODFRUTA, CF.FRUTA,
       SUM(EF.QT) AS QTTOTAL, AVG(EF.VALORUNITARIO) AS PRECO_MEDIO,
       SUM(EF.QT * EF.VALORUNITARIO) AS TOTAL
  FROM TBLACADASTROFRUTAS CF
       LEFT JOIN TBLAESTOQUEFRUTA EF ON (EF.CODFRUTA = CF.CODFRUTA)
 GROUP BY CF.CODFRUTA, CF.FRUTA
 ORDER BY 1


Estou no serviço, por isso estou sem ter como testar a query, então se der errado, da um toque que eu vejo o que pode ser.

Att,
.lg.


Responder

Gostei + 0

16/05/2009

Freed

Agradeço pela colaboração .lg.

A SQL postada retorna os resultados solicitados....

Porem retorna todas frutas cadastradas na TblaCadastroFrutas (Tabela2) mesmo que a Qt da TblaEstoqueFrutas (Tabela1) seje zero( 0 ) ou seja não tem a fruta no estoque..
tentei inserir:
WHERE QTTOTAL>0 // Ocorre erro.......
WHERE EF.QT>0 // Ocorre erro.......
WHERE QT>0 // Ocorre erro.......

No PRECO_MEDIO alterei para ´ TOTAL/QTTOTAL AS PRECO_MEDIO ´ Desta forma irá apresentar o preço média proporcional a quantidade de frutas...

Se a quantidade no banco for zero( 0 ) ou não contem valor, ocorre o erro abaixo: tem alguma forma de solucionar isto?
---------------------------
Debugger Exception Notification
---------------------------
Project TEste.exe raised exception class EInvalidOp with message ´Invalid floating point operation´.
---------------------------
Break Continue Help
---------------------------


Grato..


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar