Banco de dados no delphi 7

20/02/2016

0

Boa tarde!

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

Emanuel

Responder

Posts

20/02/2016

Raimundo Pereira

Na sua aplicação deve existir 2 var
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
Responder

20/02/2016

Emanuel

Eu tentei utilizar o código porem ele acusa que era esperado 2 parâmetros.

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.
Responder

20/02/2016

Crist

Veja se funciona assim



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;


Responder

21/02/2016

Emanuel

Esta dando um erro de "Is not a valid floatpoint point value. Depois disso retorna a linha bx := ADOQuery1.FieldByName('bx').AsFloat; em azul.

Eu sei que o primeiro erro é de um ponto ou virgula invalido, mas não soube como resolver.
Responder

21/02/2016

Emanuel

Veja se funciona assim



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?
Responder

21/02/2016

Crist

Olá,
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;
Responder

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

Aceitar