Копирование первичного ключа в другое поле в Access - PullRequest
0 голосов
/ 05 мая 2010

Эй, я пытаюсь скопировать первичный ключ в другое поле в Access. Это неважно, но проясняю, с чем я сравниваю.

... WHERE Tunniste=" & [Tarkiste] & ""

Tunniste = первичный ключ, Autonumber, ID (генерируется Access.)

Tarkiste = Это поле, которое я хочу скопировать для сравнения.

Я открыт для предложений, я уже пробовал использовать Form_Load, используя следующий код.

Private Sub Form_Load()

DoCmd.RunSQL "UPDATE Korut SET [Tarkiste]=('" & Tunniste & "');"

End Sub

Но это скопировало один и тот же ключ ко всем записям в поле "Tarkiste".

Для простоты я хочу получить копию поля «Tunniste» в масштабе 1: 1 для «Tarkiste», какой бы метод не потребовался.

Начиная с этого вопроса. Средство выбора файлов заменяет все строки одинаковым выбором.

Ответы [ 2 ]

1 голос
/ 05 мая 2010

Если два поля находятся в одной таблице, вы можете сделать это:

DoCmd.RunSQL "UPDATE Korut SET [Tarkiste]=[Tunniste]"

И он уверен, что работает!

0 голосов
/ 05 мая 2010

Чтобы лучше понять, что происходит

Одно значение обновляется в каждой строке, потому что строка вашего запроса вычисляется при загрузке формы. В это время переменная Tunniste получает значение из элемента управления, с которым она связана (в вашем случае, вероятно, элемент управления, указывающий на поле в наборе записей той же таблицы).

Таким образом, предполагая, что Tunniste равен 1 для текущей записи в Form_Load, база данных завершает выполнение запроса

UPDATE Korut SET [Tarkiste]=('1');

, где

UPDATE Korut SET [Tarkiste]=[Tunniste];

сделает правильную вещь.

На что обратить внимание:

  • вы можете (должны) тестировать и создавать свою команду SQL независимо от событий формы (особенно, если ни один из параметров запроса не зависит от значений в форме, связанных или не связанных); запуск SQL происходит в собственном пространстве
  • Используйте визуальный конструктор запросов, чтобы попрактиковаться в навыках SQL (переключитесь в режим SQL и обратно, чтобы понять, что происходит)
  • читать о том, как данные связаны с формой
  • вы обновляете все записи в таблице каждый раз, когда загружается форма, и (если это обычная форма редактирования) это, безусловно, не оптимально (вы можете, по крайней мере, добавить условие WHERE в SET [Tarkiste] только в случае, если значения разные), это будет плохо масштабироваться
  • вы, похоже, используете разные типы данных для одного и того же поля и преобразования без вывода сообщений; это может иметь неприятные последствия

Возможно, объяснение того, чего вы пытаетесь достичь, принесет лучший совет.

...