30.10.2008, 13:37 | #1 |
Участник
|
Создала датапорт на импорт.
Если запись с ключевым полем в таблицеуже существовала, датапорт очищает поля, которые не были импортированы. Мне же нужно, чтобы импортированные поля перезаписались, а остальные остались без изменения. Это возможно? Спасибо за помощь. |
|
30.10.2008, 14:09 | #2 |
MCTS
|
Посмотрите на свойства DataItem:
AutoUpdate = Yes AutoReplace = No |
|
30.10.2008, 14:11 | #3 |
Участник
|
Вам должно помочь установить следующие свойства в строке датапорта: AutoUpdate = Yes, AutoReplace = No
Долго набирал, apanko уже ответил |
|
30.10.2008, 15:55 | #4 |
Участник
|
Хм... вообще-то, эти свойства именно так и установлены...
|
|
31.10.2008, 09:25 | #5 |
Участник
|
У меня на OnAfterImportReport такой код:
ServItem.RESET; ServItem.VALIDATE("No.",SERIALNO); IF ServItem.INSERT(TRUE) THEN; ServItem.VALIDATE("Customer No.",CUSTNO); ......... ServItem.MODIFY(TRUE); На OnBeforeImportReport - обнуление переменных. |
|
31.10.2008, 10:01 | #6 |
MCTS
|
Те рекомендации, которые дал Milk и я они подходят если в таблицу импортуются не все поля. Т.е. в справочник товаров импортируются только цены (в датапорте два поля Товар Но. и Цена). В этом случае датапорт обновит в таблице только поле Цена, а остальные не тронет.
Я так понял вы хотите хотите, чтобы если в поле есть не пустое значение, а в датапорте в этом поле пусто, то нужно оставить старое значение, и не импортировать "путое" из датапорта. Тут мне в голову пришло такое решение, возможно есть варианты по красивше: Объявляем такую же переменную Record как и импортируемая таблица (например, 27 - товары). Объявляем переменную такого же типа как поле первичного ключа этой табицы (считаем, что в первичный ключ входит одно поле). Например cNo code 20. И еще одну переменную типа Boolean (bExist) В триггере OnBeforeEvaluateField(VAR Text : Text[1024]) поля первичного ключа (в нашем случае "Но.") пишем такой код: Код: //EVALUATE(cNo,Text); //это если поле типа интежер, для code думаю хватит: cNo:=Text; //возможно придется отрезать пробелы вручную (т.к. длина явно не совпадает). не проверял. IF rItem.GET(cNo) THEN bExist:=TRUE; Код: IF bExist THEN BEGIN IF (Поле1='')AND(rItem.Поле1<>'') THEN Поле1:=rItem.Поле1; //или Валидейт, что больше нравится. .... MODIFY; END; |
|
31.10.2008, 10:39 | #7 |
Участник
|
Нет, меня в первую очередь интересует как раз первый вариант, когда импортируются не все поля. Эти поля поля проходят импорт нормально, не пойму, почему обнуляются остальные?
А второй вариант тоже необходимо будет осуществить, спасибо за идею! |
|
31.10.2008, 15:42 | #8 |
Участник
|
Проблема была в INSERT.
С FIND все работает Всем спасибо за отклик! |
|