我有一个数据库,其中有一个“用户表”。在此表中,有一些列包含用户信息(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;
答案 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;