1

TComboBoxデータベースから収集した名前のリストが含まれています。その隣には、TEdit一人一人に関連付けられたID番号を表示する目的で使用する予定です。

firstNameとlastNameはテーブル内の別々のフィールドですが、TComboboxに一緒に表示されるため、firstNameとlastNameを2つの別々の変数に分割するための小さなセクションを作成しました。

 pos := AnsiPos(' ', cbStudents.Text); 
 firstName := Copy(cbStudents.Text, 0, pos-1);
 lastName := Copy(cbStudents.Text, pos+1, Length(cbStudents.Text));

次に、SQLコードを実行します。

  try
    query.Open;
    query.SQL.Add('Select studentID');
    query.SQL.Add('From student');
    query.SQL.Add('Where firstName = ' + StrToQuote(firstName));
    query.SQL.Add('And lastName = ' + StrToQuote(lastName));
    editID.Text := query
  finally
    query.Free;
  end;

注:StrToQuote変数firstNameとlastNameを二重引用符で囲みます( "")

私が受け取っているエラーは次のとおりです。

引数が範囲外です

私は何が間違っているのですか?よろしくお願いします。

4

2 に答える 2

5

コードが機能しません。最初にクエリを開き、次にSQLクエリ文字列を設定します。それ以外の

   try
     query.Open;
     query.SQL.Add('Select studentID');
     query.SQL.Add('From student');
     query.SQL.Add('Where firstName = ' + StrToQuote(firstName));
     query.SQL.Add('And lastName = ' + StrToQuote(lastName));
   finally
     query.Free;
   end;

使用する

  // create or reset query here
  query := ...

  try

    query.SQL.Add('SELECT studentID');
    query.SQL.Add('FROM student');
    query.SQL.Add('WHERE firstName = :firstname');
    query.SQL.Add('AND lastName = :lastName');

    // set parameter values here

    query.Open;

    // now transfer data from fields to the user interface (TEdit)

  finally
    query.Free;
  end;
于 2012-11-03T08:55:10.467 に答える
3

あなたのアプローチは私にとって最適ではありませんが(表示名を分割する)、ここでの問題は、クエリを解放した後にquery.Fields[0].AsStringにアクセスすることです。

于 2012-11-03T08:07:36.600 に答える