1

新しいデータベース (mssql) 構造で動作するように、Delphi ソフトウェアにパッチを適用する任務を負っています。以前のデータベース (mssql) では、読み取られる列はすべて同じテーブルにありました。新しいバージョンでは、file_name と class_name は数量値として別のテーブルにあります。これら 2 つのデータベース テーブルの Join を作成することで、これを修正できると思います。問題は、私が Delphi に慣れていないことです。
現在のコードは以下です。これら 2 つのデータベースを 1 つに結合するにはどうすればよいですか?

dataTable=style001 dataTable1=style

ありがとう!!!

  dataTable.Active := True;
  datatable.Open;
  dataTable1.Active := True;
  datatable1.Open;

  while not datatable1.Eof do
  begin
    Application.ProcessMessages;

    file_name := trim(datatable1.FieldByName('code').asString) + '.jpg';
    class_name := trim(datatable1.FieldByName('category').asString);

    if not FileExists(picfolder + file_name) then
    begin
      dataTable1.next;
      continue;
    end;

    instock := datatable.FieldByName('onhand').asString;
    TryStrToInt(instock, instock_num);

    quantity := datatable.FieldByName('onorder').asString;
    TryStrToInt(quantity, num);

    num := instock_num - num;

    is_active := ( num > 10 );


    for i := 0 to file_count-1 do
    begin
      if is_active = active_class[file_class[i]] then
      if SameText(files[i],file_name) then
      begin // use TStringList instead
        if SameText(class_name, classes[file_class[i]]) then // same class
        begin
          file_ok[i] := true;
          class_ok[file_class[i]] := true;
        end;
        break;
      end;
    end;

    if class_name <> '' then class_name := class_name + '\';
    dest := picfolder + active_path[is_active] + class_name;
    deldest := picfolder + active_path[not is_active] + class_name;

    {$I-}

    if FileExists(deldest + file_name) then
      DeleteFile(PChar(deldest + file_name ));

    if not FileExists(dest + file_name) then
    begin
      ForceDirectories(dest);
      CopyFile(PChar(picfolder + file_name ), PChar(dest + file_name ), true );
    end;

    dataTable1.next;
  end;

  for i := 0 to file_count-1 do
    if not file_ok[i] then
    begin // delete wrong file if empty
//      ShowMessage('problem: ' + picfolder + active_path[active_class[file_class[i]]] + classes[file_class[i]] + '\' + files[i]);
      DeleteFile(picfolder + active_path[active_class[file_class[i]]] + classes[file_class[i]] + '\' + files[i]);
    end;
  for i := 0 to class_count-1 do
    if not class_ok[i] then
    begin // delete old class if empty
//      ShowMessage('problem: ' + picfolder + active_path[active_class[i]] + classes[i] + '\' );
      RemoveDir(picfolder + active_path[active_class[i]] + classes[i] + '\' );
    end;


  beep;
  dataTable.Active := False;
  dataTable1.Active := False;
4

2 に答える 2

4

JOIN は SQL リクエスト内にあり、ここに表示されている消費ループ コードではありません。

TQuerytwo の代わりにa を使用しTTable、2 つのテーブルを結合するための SQL select を記述する必要があります。

SQL 要求を変更し、SELECT の FROM 句に 2 つのテーブルを追加し、WHERE 句に JOINture を追加する必要があります。JOIN については、この記事を参照してください。

于 2012-07-21T19:37:28.670 に答える
2

a を使用して、そのプロパティをテーブルの 1 つにTDataSource接続します。DataSet次にMasterSource、他のテーブルのプロパティをそのデータソースに設定します。プロパティの省略記号ボタンをクリックしMasterFields、接続フィールドを選択します。

スタイルフィールドが一意であると仮定すると、最初のテーブルをナビゲートすると、2 番目のテーブルが自動的に続きます。

于 2012-07-21T21:27:41.350 に答える