2014-01-07 4 views
0

Я работаю над программой, использующей ODBC для чтения/записи из баз данных всех типов, и у меня возникают проблемы с решением проблемы, где возможно дублирование строк в базе данных, но мы хотим только обновить один экземпляр.Обновление ODBC одного экземпляра повторяющейся строки

Так, например, говорят, что пользователь подключен к какой-то базе данных ODBC, который имеет следующую таблицу:

first_name|last_name 
-------------------- 
person |man 
person |man 
triangle |man 

В нашем приложении все три из этих строк будет отображаться в интерфейсе и вы можете редактировать каждый из них по отдельности. Проблема в том, что в базе данных нет столбца первичного ключа, о котором наше приложение знает, и нам не разрешено добавлять что-либо в базу данных, которую пользователь не добавляет, поэтому мы не можем просто добавить столбец первичного ключа, так как он может разорвать их базу данных. Поскольку столбца первичного ключа нет, при выполнении UPDATE, единственный способ узнать, какая строка для обновления должна сделать предложение WHERE, которое сравнивает значение каждого столбца в строке. Так что-то вроде этого:

UPDATE table SET first_name = something WHERE first_name = person AND last_name = man; 

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

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

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

ответ

0

Использование ODBC для неизвестного механизма базы данных, возможно, вы можете сделать это только с помощью курсора чтения и записи и позиционированного обновления. Таким образом, вы можете обновить одну строку, даже если существуют другие идентичные строки. Обратите внимание, что не исключено, что драйвер ODBC для каждого механизма базы данных будет поддерживать этот тип обновлений или даже обновления для таблиц без уникального индекса.

+0

hmm Я не делал ничего такого, что нравилось бы курсорам, поэтому мне нужно будет изучить, как делать то, что вы описали, прежде чем я знаю, будет ли это работать. По крайней мере, это с чего начать. – Shenjoku

Смежные вопросы