0

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

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

uyeler = 表

nick = 用户名列。

site = 用户站点名称列。

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;
4

1 回答 1

0

如果我理解正确的话。有一个网站列表框。如果运行该程序的用户的积分等于列表框中的行数,则该用户的站点将被添加到列表框中。此外,我正在假设一个用户可以拥有多个站点。

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

将下面的代码视为伪代码!

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;
于 2012-08-10T05:16:00.593 回答