На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Организуем VBA-FAQ! Если у Вас есть предложения, выскажитесь здесь: Пишем FAQ, интересно Ваше мнение
Популярные разделы FAQ:    user posted image Общие вопросы    user posted image Особенности VBA-кода    user posted image Оптимизация VBA-кода    user posted image Полезные ссылки

1. Старайтесь при создании темы указывать в заголовке или теле сообщения название офисного приложения и (желательно при работе с Office 95/97/2000) его версию. Это значительно сократит количество промежуточных вопросов.
2. Формулируйте вопросы как можно конкретнее, вспоминая (хотя бы иногда) о правилах ВЕЛИКОГО И МОГУЧЕГО РУССКОГО ЯЗЫКА, и не забывая, что краткость - сестра таланта.
3. Не забывайте использовать теги [сode=vba] ...текст программы... [/code] для выделения текста программы подсветкой!
4. Темы с просьбой выполнить какую-либо работу полностью за автора здесь не обсуждаются и переносятся в раздел ПОМОЩЬ СТУДЕНТАМ.
Модераторы: Old Bat, MIF
  
> Перенести запись из одной таблицы mdb-файла в другую , Excel 2003
    Есть две одинаковые по полям таблицы в базе Access.
    Существует ли оператор переноса всей записи, или обязательно перебирать поля?
    Т. е. открыл запись из табл1 > скопировал > вставил (создал) в табл2 > удалил из табл1.
      Потребуется два запроса.
      ExpandedWrap disabled
        Insert Into table1
        Select table2.*
        From table2
        Where table2.ID = 123

      ExpandedWrap disabled
        Delete From table2
        Where table2.ID = 123

      Первый запрос корректен только если все поля во второй таблице (источники) имеют одноимённые аналоги в первой, а остальные поля первой таблицы не имеют ограничения not null или имеют дефолтное значение.
        Спасибо, прекрасно работает.
        ExpandedWrap disabled
              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.
          ExpandedWrap disabled
            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
            Ещё вопрос. Появилась необходимость копировать запись из zaseleno в zaseleno2 с присвоением нового [kod], который является ключом и счётчиком (в zaseleno - это одно значение, а в zaseleno2 должно присвоить новое). При вышепрописанном синтаксисе, ессно, ругается, что подобная запись существует (тогда это было нужно).
              Скопировать данные во временную таблицу, где поле кода имеет тип Long Integer.
              Изменить значения.
              Скопировать из временной таблицы во вторую.
                Цитата Akina @
                Изменить значения.

                На что изменить? "" - просто пустое значение в поле [kod]?
                  Цитата yurpas @
                  в zaseleno - это одно значение, а в zaseleno2 должно присвоить новое

                  Твои слова? Так какого же [censored]
                  Цитата yurpas @
                  просто пустое значение

                  ???
                    Цитата yurpas @
                    в zaseleno2 с присвоением нового [kod], который является ключом и счётчиком

                    Пардон, должно присвоить следующее для zaseleno2. Или запросом узнать MAX([kod]) from zaseleno2 и затем его+1 вставить в временную? Так правильно?
                    Получается, что функции обновления ключа при переносе записи нет?
                    Сообщение отредактировано: yurpas -
                      Цитата yurpas @
                      Получается, что функции обновления ключа при переносе записи нет?

                      Именно. Есть два варианта - прямое присвоение (возможно, расчётное) либо автоматическое присвоение.
                      Однако если твоя задача - перенести данные из первой таблицы во вторую, чтобы при этом значения ключа вновь добавляемых во вторую таблицу записей продолжали значения счётчика в ней - как раз и следует использовать автоматическое присвоение. Т.е. использовать вон тот запрос, но заменить в нём звёздочку на перечень конкретных полей - всех, кроме поля ключа. При этом ключевое поле как раз получит автоматически значения, продолжающие работу счётчика в этой таблице.
                      1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                      0 пользователей:


                      Рейтинг@Mail.ru
                      [ Script execution time: 0,0343 ]   [ 15 queries used ]   [ Generated: 24.05.24, 09:39 GMT ]