2012-08-08 61 views
0

我有一个数据库,里面有'用户表'。在这个表格中,有列包含用户信息(网站,尼克,jeton,邮件,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

> *“如果任何用户的信用值是4,并且有5条线在列表框中,用户的网站将不会被添加到列表框。但是,如果用户的信用值是4或更低时,他/她的网站将被添加(列出)在列表框中“*>这没有意义,您需要的结果与* 4或更低的*和*'4'*不同。 – 2012-08-09 17:25:31

+0

@SertacAkyuz,Pardon,我现在编辑过。 – Ankara 2012-08-09 18:41:29

+0

我很难理解,但无论如何,对于初学者来说,它看起来像对特定用户的学分感兴趣,但是您的select语句将检索所有* jeton> 0的记录。您可能需要选择该用户的记录(其中(nick = xyz)和(jeton> 0)),或者在查询中找到该特定用户的记录。我建议您将DBGrid附加到您的查询中,以便确保您的查询正在检索您打算的记录。我可能会误解。 – 2012-08-09 20:13:24

回答

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; 
+0

这段代码有很多错误。总计:9 – Ankara 2012-08-10 18:28:15

+0

我在不使用编译器的情况下键入代码来检查语法是否正确。随意改进语法。不过,我希望我的代码中的大纲/算法可以帮助您找到问题的答案。 – Eminem 2012-08-10 18:47:26

相关问题