Как искать и находить данные из таблицы базы данных доступа и обновлять другую таблицу соответствующими полями, которые изменились - PullRequest
0 голосов
/ 14 мая 2018

У меня есть база данных доступа с таблицей 1 с 3 именами полей, т. Е. Наименование товара, наличие на складе и на складе. База данных использует Adoquery и источник данных из Delphi 7 для обновления данных в таблице1. Я использую следующий код:

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  ADOQuery1.Open;
  ADOQuery1.Locate('Item name',Edit1.Text,[]) ;
  ADOQuery1.Edit;
  ADOQuery1.FieldValues['Item name']:=edit1.Text;
  ADOQuery1.FieldValues['stock in']:=edit2.Text;
  ADOQuery1.FieldValues['stock out']:=Edit3.Text;
  ADOQuery1.post;
end

Этот код работает, только когда есть один элемент, который нужно обновить из поля edit1. Мне нужен код, который может искать несколько имен элементов одновременно и обновлять соответствующие имена элементов, которые изменили значения полей. Я попытался использовать приведенный выше код для хранения данных в отдельной временной таблице2 с похожими именами полей, но я не знаю кода, который может искать и находить имена элементов из этой отдельной таблицы2, а затем обновлять соответствующие поля в таблице1, которые имеют изменено в соответствии с именами предметов

1 Ответ

0 голосов
/ 15 мая 2018

Если я вас правильно понял, вы хотите ввести несколько значений для [Item Name] и равное количество значений для [stock in] и [stock out]

И затем вы хотите найти запись, соответствующую каждомузначение для [Item Name] и обновить его в вашей базе данных

Один вариант будет использовать 3 Memo controls вместо 3 Edit controls, тогда вы можете набрать несколько значений одновременно.

Теперь все вынужно поместить код, который у вас уже есть, в цикл, который читает все значения из первой заметки.

вот пример

var
  i: integer;
begin
  ADOQuery1.Open;

  for i := 0 to MemoItemNames.Lines.Count - 1 do
  begin
    // ALWAYS test if the record can be located, else you are editing a random record !!!!
    if ADOQuery1.Locate('Item name', MemoItemNames.Lines[i], [])) then
    begin
      ADOQuery1.Edit;
      ADOQuery1.FieldValues['stock in']  := MemoStockIn.Lines[i];
      ADOQuery1.FieldValues['stock out'] := MemoStockOut.Lines[i];
      ADOQuery1.post;
    end; 
  end;

Это требует дополнительного кодирования вне курса, чтобыпроверьте, является ли что-либо действительным, например, число строк в каждой заметке должно быть одинаковым, или формат значения stock in и т. д. ...

Возможно, существуют более эффективные решения вашей проблемыпоэтому, если вы сообщите нам, какую проблему вы пытаетесь решить, возможно, мы можем предложить более элегантное решение

...