Проблема мастера / детализации с dbexpress
У меня есть приложение master / detail, написанное на Delphi 2010 / dbExpress с использованием firebird 2.3. Я обнаружил проблему
Если у меня есть две или три или более идентичных строки данных в деталях, изменение любых данных в одной из них также изменяет данные в других строках, я полагаю, это происходит потому, что обновление использует только invoice_id и serial в качестве ключей и данных. равно в обоих случаях, обновление выполняется в двух случаях.
Счет-фактура основных данных, серийный номер, идентификатор клиента, дата 1, А, 1.12.12.2010
Детальные данные Invoice_id, серийный, кол-во, описание, Цена 1, A, 10, КОРОБКИ НЕКОТОРЫХ ПЕРСОНАЛОВ, 52.52 1, A, 10, КОРОБКИ НЕКОТОРЫХ ПЕРСОНАЛОВ, 52.52
Я думаю, я могу исправить это, используя поле ltes name ir line_no, в котором каждая строка будет иметь различный номер, и поэтому данные можно будет различить, чтобы выполнить обновление следующим образом:
Line_no, Invoice_id, серийный, кол-во, описание, Цена 1.1, A, 10, КОРОБКИ НЕКОТОРЫХ ПЕРСОНАЛОВ, 52.52 2.1, A, 10, КОРОБКИ НЕКОТОРЫХ ПЕРСОНАЛОВ, 52.52
Таким образом, информация та же, но она также имеет line_no для дифференциации информации в обновлении.
Любой знает любой способ сделать это на стороне клиента, в наборе данных клиента,
Большое спасибо и поздравления
1 ответ
Кажется, что в вашей таблице подробностей нет первичного ключа (при условии, что invoice_id является внешним ключом главной таблицы. Чтобы убедиться, что FireBird (или любая база данных, связанная с dbExpress) обновляет правильную запись, вы должны добавить первичный ключ (поле autoinc) к таблице подробностей.