Banco de dados no delphi 7
20/02/2016
0
Sou novo por aqui e não manjo muito de programação, porém no meu tcc eu propus a criação de um software de calculo de estruturas. O básico do código eu consegui fazer, porem surgiu uma duvida.
Como eu faço para que um valor que foi calculado anteriormente, condicione a busca em uma tabela.
Por exemplo:
Calculo o valor de Kc := (bw*(d*d))/(md*100);
com este resultado eu preciso encontrar o valor de "Ks" e "Bx" que esta no meu banco de dados, para que possa continuar os cálculos, eu tentei utilizar a função SQL mas sem sucesso.
// Buscar na tabela1 o valor de Ks e Bx.
ADOQuery1.close;
ADOQuery1.sql.clear;
ADOQuery1.sql.add('select Bx, Ks');
ADOQuery1.SQL.add('from Tabela1');
ADOQuery1.open;
Alguém pode me dar uma ajuda em como resolver isto?
Emanuel
Posts
20/02/2016
Raimundo Pereira
vBx, vKs
Bx, Ks
ADOQuery1.close;
ADOQuery1.sql.clear;
ADOQuery1.sql.add('select Bx, Ks');
ADOQuery1.SQL.add('from Tabela1');
ADOQuery1.SQL.add('where bx='+vBx+' and ks=vKs');
ADOQuery1.open;
Espero que ajude, caso não funcione me passa os tipos dos campos bx e ks da tabela, e como sua aplicação está gerando os valores de bx e ks,
para definimos o tipo de variável será vbx e vks
20/02/2016
Emanuel
Eu estou utilizando um banco de dados do access, como na imagem.
[img]http://arquivo.devmedia.com.br/forum/imagem/476122-20160220-172922.jpg[/img]
O código esta ficando assim. As variáveis eu estou utilizando do tipo double e as que vc recomendou como integer.
md, bw, h, fck, principal, transversal, cnom, kc, ks, d, asnec, bwnec, area, nb : double;
vBx, vKs : Integer;
// Estes são os dados que o usuário insere.
md := StrToFloat(Edit1.text);
bw := strtofloat(edit2.Text);
h := strtofloat(edit3.Text);
fck := strtofloat(edit4.Text);
principal := strtofloat(edit5.Text);
transversal := strtofloat(edit6.Text);
cnom := strtofloat(edit7.Text);
// Primeiro calculo, define o valor de "d".
d := (h-cnom-(transversal/2)-principal);
// Com o valor de "d" e os outros valores que o usuário inseriu, calcula-se o Kc.
kc := (bw*(d*d))/(md*100);
// Com o valor de Kc, deve-se buscar na tabela o valor de Ks, Bx.
x := (bx*d);
asnec := (ks*md*100)/(d);
Esta mais ou menos no caminho certo?
Desde já obrigado pela ajuda.
20/02/2016
Crist
procedure TForm1.Button1Click(Sender: TObject);
var
kc :Double;
bx,ks :Double;
begin
//busca na tabela1 os valores de bx e ks enviando o valor do kc
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select * from tabela1 where kc = ' + QuotedStr(FloatToStr(kc)) );
ADOQuery1.Open;
bx := ADOQuery1.FieldByName('bx').AsFloat;
ks := ADOQuery1.FieldByName('ks').AsFloat;
end;
21/02/2016
Emanuel
Eu sei que o primeiro erro é de um ponto ou virgula invalido, mas não soube como resolver.
21/02/2016
Emanuel
procedure TForm1.Button1Click(Sender: TObject);
var
kc :Double;
bx,ks :Double;
begin
//busca na tabela1 os valores de bx e ks enviando o valor do kc
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select * from tabela1 where kc = ' + QuotedStr(FloatToStr(kc)) );
ADOQuery1.Open;
bx := ADOQuery1.FieldByName('bx').AsFloat;
ks := ADOQuery1.FieldByName('ks').AsFloat;
end;
Mudando esta linha
ADOQuery1.SQL.Add('select * from tabela1 where kc = ' + QuotedStr(FloatToStr(kc)) );
para
ADOQuery1.SQL.Add('select * from tabela1 where kc');
Eu consegui fazer o código me retornar um valor da tabela, porém esta sempre retornando o primeiro valor e não o valor de acordo com o resultado de Kc. Alguém sabe como eu faço isso dar certo?
21/02/2016
Crist
O seu banco de dados é Access, é para consultar nele precisa de aspas duplas.
Segue um exemplo:
procedure TForm1.Button1Click(Sender: TObject);
var
kc :Double;
bx,ks :Double;
begin
//busca na tabela1 os valores de bx e ks enviando o valor do kc
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('select * from tabela1 where kc = ' + #39 + QuotedStr(FloatToStr(kc)) + #39 );
//memo para pegar a consulta gerada é assim verificar se o conteúdo está correto
Memo1.Lines.Add(ADOQuery1.SQL.Text);
ADOQuery1.Open;
bx := ADOQuery1.FieldByName('bx').AsFloat;
ks := ADOQuery1.FieldByName('ks').AsFloat;
end;
Clique aqui para fazer login e interagir na Comunidade :)