0

私はデータベースを持っていて、その中に「usersテーブル」があります。このテーブルには、ユーザー情報(site、nick、jeton、mail、sifre)を含む列があります。クレジット制をベースにしたプログラムを作ろうとしています。すべてのユーザーがプログラムを実行します。ユーザーのクレジットがリストボックス内のサイトの数(つまり、行数)と等しい場合、ユーザーのサイトはリストボックスに表示されます。それ以外の場合は表示されません。

データベースでは、「credits」列の値はリストボックスの行数と同じである必要があります。たとえば、ユーザーのクレジット値が4で、リストボックスに5行ある場合、ユーザーサイトはリストボックスに追加されません。ただし、ユーザーのクレジット値が5以上の場合、そのユーザーのサイトはリストボックスに追加(リスト)されます。

uyeler =テーブル

ニック=ユーザー名の列。

サイト=ユーザーサイト名の列。

jeton =ユーザークレジット列。

mail =ユーザーのメール列。

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

私があなたを正しく理解しているなら。サイトのリストボックスがあります。プログラムを実行するユーザーがリストボックスの行数と同じクレジットを持っている場合、そのユーザーのサイトがリストボックスに追加されます。また、1 人のユーザーが多くのサイトを持つことができるという前提に基づいて取り組んでいます。

まず、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;
于 2012-08-10T05:16:00.593 に答える