如何在任何条件下将列的值提取到列表框?

时间:2012-08-08 19:17:43

标签: database delphi listbox delphi-7

我有一个数据库,其中有一个“用户表”。在此表中,有一些列包含用户信息(site,nick,jeton,mail,sifre)。我正在尝试基于信用系统制作一个程序。任何用户运行程序,如果用户信用等于列表框中的站点数(我的意思是行数),则用户站点将出现在列表框中。否则,它将不会出现。

在数据库中,'credits'列中的值必须等于listbox中的行数。例如,如果任何用户的信用值为4且列表框中有5行,则用户站点将不会添加到列表框中。但如果用户的信用值为5或更高,他/她的网站将被添加(列出)在列表框中。

uyeler =表

缺口 =用户名列。

网站 =用户网站名称列。

jeton =用户信用栏。

邮件 =用户邮箱列。

sifre =用户密码栏。

我试过了这些;

MyQuery1.Close;
 MyQuery1.SQL.Text :='SELECT jeton, site FROM uyeler WHERE jeton > 0 ORDER BY site';
  MyQuery1.Open;
  ListBox1.Items.Clear;
  If (MyQuery1.IsEmpty) or (MyQuery1.FieldByName('jeton').AsString > IntToStr(Listbox1.Items.Count)) Then
  Begin
  MessageDlg('warning: you have not credit!', mtWarning,[mbOK],0)
  End
  Else
  Begin
  While not MyQuery1.Eof do
  Begin
  ListBox1.Items.Add(MyQuery1.Fields[1].AsString);
  MyQuery1.Next;
  end;
 MyQuery1.Close;
End;

1 个答案:

答案 0 :(得分:0)

如果我正确理解你。有一个网站列表框。如果运行程序的用户具有等于列表框中行数的信用,则该用户的站点将被添加到列表框中。另外,我假设一个用户可以有很多站点。

首先更改您的sql查询以根据用户是否找到返回数据。即。

  

将以下代码视为伪代码!

MyQuery1.SQL.Text :='SELECT jeton, site FROM uyeler WHERE nick =:nick and jeton > 0 ORDER BY site';
MyQuery.Params['nick'] = userName;  //Check syntax as this line is meant as pseudo code

int noOfUserCredits = MyQuery1.FieldByName('jeton');

if (noOfUserCredits >= listBox.lines.Count)
begin
  while not MyQuery1.Eof do
  begin
    ListBox1.Items.Add(MyQuery1.FieldByName('site').AsString);
    MyQuery1.Next;
  end;
end else
if (noOfUserCredits < listBox.lines.Count)
begin
  //Do stuff
end else
if ((noOfUserCredits == 0) or (MyQuery1.IsEmpty))
begin
  MessageDlg('warning: you have not credit!', mtWarning,[mbOK],0);
end;