Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.134.79.121] |
|
Сообщ.
#1
,
|
|
|
Есть две одинаковые по полям таблицы в базе Access.
Существует ли оператор переноса всей записи, или обязательно перебирать поля? Т. е. открыл запись из табл1 > скопировал > вставил (создал) в табл2 > удалил из табл1. |
Сообщ.
#2
,
|
|
|
Потребуется два запроса.
Insert Into table1 Select table2.* From table2 Where table2.ID = 123 Delete From table2 Where table2.ID = 123 Первый запрос корректен только если все поля во второй таблице (источники) имеют одноимённые аналоги в первой, а остальные поля первой таблицы не имеют ограничения not null или имеют дефолтное значение. |
Сообщ.
#3
,
|
|
|
Спасибо, прекрасно работает.
Sub probka() On Error GoTo ggg Dim con As New ADODB.Connection Dim rst As New ADODB.Recordset strDB = "d:\Bron\reg\import.mdb" con.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & strDB & ";" rst.Open "insert into zaseleno2 select * From zaseleno where Kod=59", con con.Close Set rst = Nothing Set con = Nothing Exit Sub ggg: If Err.Number = -2147467259 Then MsgBox "Аналогичная запись уже есть в базе." Else MsgBox "Ой, что-то случилось" End If End Sub Появившаяся проблема: при попытке повторного переброса записи с кодом 59 возникает ошибка (на самом деле это хорошо) из-за того, что происходит попытка дублирования записи с одинаковым ключевым полем. Поэтому и добавлен If Err.Number. |
Сообщ.
#4
,
|
|
|
Sub probka() Dim con As New ADODB.Connection Dim rst As New ADODB.Recordset On Error GoTo ErrorHandler strDB = "d:\Bron\reg\import.mdb" con.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & strDB & ";" rst.Open "insert into zaseleno2 select * From zaseleno where Kod=59", con Set rst = Nothing con.Close Set con = Nothing Exit Sub ErrorHandler: Select Case Err.Number Case -2147467259 MsgBox "Аналогичная запись уже есть в базе." Case Else MsgBox "Ошибка номер " & CStr(Err.Number) & vbNewLine & Err.Description End Select Resume ExitSub ExitSub: End Sub |
Сообщ.
#5
,
|
|
|
Ещё вопрос. Появилась необходимость копировать запись из zaseleno в zaseleno2 с присвоением нового [kod], который является ключом и счётчиком (в zaseleno - это одно значение, а в zaseleno2 должно присвоить новое). При вышепрописанном синтаксисе, ессно, ругается, что подобная запись существует (тогда это было нужно).
|
Сообщ.
#6
,
|
|
|
Скопировать данные во временную таблицу, где поле кода имеет тип Long Integer.
Изменить значения. Скопировать из временной таблицы во вторую. |
Сообщ.
#7
,
|
|
|
Цитата Akina @ Изменить значения. На что изменить? "" - просто пустое значение в поле [kod]? |
Сообщ.
#8
,
|
|
|
Цитата yurpas @ в zaseleno - это одно значение, а в zaseleno2 должно присвоить новое Твои слова? Так какого же [censored] Цитата yurpas @ просто пустое значение ??? |
Сообщ.
#9
,
|
|
|
Цитата yurpas @ в zaseleno2 с присвоением нового [kod], который является ключом и счётчиком Пардон, должно присвоить следующее для zaseleno2. Или запросом узнать MAX([kod]) from zaseleno2 и затем его+1 вставить в временную? Так правильно? Получается, что функции обновления ключа при переносе записи нет? |
Сообщ.
#10
,
|
|
|
Цитата yurpas @ Получается, что функции обновления ключа при переносе записи нет? Именно. Есть два варианта - прямое присвоение (возможно, расчётное) либо автоматическое присвоение. Однако если твоя задача - перенести данные из первой таблицы во вторую, чтобы при этом значения ключа вновь добавляемых во вторую таблицу записей продолжали значения счётчика в ней - как раз и следует использовать автоматическое присвоение. Т.е. использовать вон тот запрос, но заменить в нём звёздочку на перечень конкретных полей - всех, кроме поля ключа. При этом ключевое поле как раз получит автоматически значения, продолжающие работу счётчика в этой таблице. |