VB & SQL

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
MadChild
Обычный пользователь
Обычный пользователь
 
Сообщения: 84
Зарегистрирован: 04.03.2002 (Пн) 14:52
Откуда: Russia

VB & SQL

Сообщение MadChild » 19.02.2008 (Вт) 22:39

Доброе время суток.

Всю думалку выдумал, а вот по какому поводу:
есть таблица с данными в Access.
При выполнении из VB комманды INSERT, VB сообщает ошибку 3219 (Недоопустимая операция).
База открыта с полным дступом.
Вот текст запроса:
Код: Выделить всё
INSERT INTO Clients (ClientName, Index, Address, Phone1, Phone2, Dob, DataAdd) VALUES ('Иванов А.А.', '630124', '630124 г.Новосибирск, ул. Чапаева, 17, 22', '3370072', '', '', '20.02.2008');


Вот структура таблицы:
Код: Выделить всё
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ KEY_C       + Счётчик (ключ)   + Счетчик уникальности
+ ClientName  + Текст (40)       + ФИО клиента (полностью)
+ Sity        + Текст (40)       + Населенный пункт -???
+ Index       + Текст (6)        + Индекс населённого пункта
+ Address     + Поле МЕМО        + Адрес доставки
+ Phone1      + Текст (50)       + Контактный телефон 1
+ Phone2      + Текст (50)       + Контактный телефон 1
+ Dob         + Текст (10)       + Дата рождения
+ DataAdd     + Текст (10)       + Дата добавления
+ Comment     + Пле МЕМО         + Комментарии
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


Самое, что интересное, этот же запрос выполняв в Access - все ок.

HandKot
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 28.06.2006 (Ср) 13:34
Откуда: Sergiev Posad

Сообщение HandKot » 20.02.2008 (Ср) 8:51

покажите как подключаетесь и как выполняете запрос
I Have Nine Lives You Have One Only
THINK!

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 20.02.2008 (Ср) 8:53

Допускают ли поля Phone2 и Dob пустое значение (не null, а пустую строку)?
Lasciate ogni speranza, voi ch'entrate.

MadChild
Обычный пользователь
Обычный пользователь
 
Сообщения: 84
Зарегистрирован: 04.03.2002 (Пн) 14:52
Откуда: Russia

Сообщение MadChild » 20.02.2008 (Ср) 17:47

Вот так подключаюсь:
Код: Выделить всё
        Set wrkJet = CreateWorkspace("", "admin", "", dbUseJet)
        Set db = wrkJet.OpenDatabase(.DBPath, False, False, "MS Access;PWD=" & .DBPass)


Вот строка запроса:
Код: Выделить всё
        sSQL = "INSERT INTO Clients (" & _
               "ClientName, Index, " & _
               "Address, Phone1, " & _
               "Phone2, Dob, " & _
               "DataAdd) VALUES (" & _
               "'" & KlientFIO & "', " & _
               "'" & KlientIndex & "', " & _
               "'" & KlientAddress & "', " & _
               "'" & KlientPhone1 & "', " & _
               "'" & KlientPhone2 & "', " & _
               "'" & DOBTxt & "', " & _
               "'" & Date & "');"
        Set rs = db.OpenRecordset(sSQL)


Поля Phone2 и Dob могут быть пустыми (Обязательное поле: нет, Пустые строки: да).

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 20.02.2008 (Ср) 18:02

Ну тогда попробуй имена полей (Index, DateAdd) заключить в квадратные скобки. То есть [Index], [DateAdd].
Lasciate ogni speranza, voi ch'entrate.

MadChild
Обычный пользователь
Обычный пользователь
 
Сообщения: 84
Зарегистрирован: 04.03.2002 (Пн) 14:52
Откуда: Russia

Сообщение MadChild » 20.02.2008 (Ср) 18:12

alibek писал(а):Ну тогда попробуй имена полей (Index, DateAdd) заключить в квадратные скобки. То есть [Index], [DateAdd].


Борода. Тот же результат.

А это может быть связанно с тем, что на базе стоит пароль.
Хотя обновление данных проходит гладко (в этой же таблице).

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 20.02.2008 (Ср) 19:04

Да пароль тут не причем.
Ну... попробуй еще кавычки на двойные заменить. Может быть в DAO строки в двойных должны указываться.
Lasciate ogni speranza, voi ch'entrate.

MadChild
Обычный пользователь
Обычный пользователь
 
Сообщения: 84
Зарегистрирован: 04.03.2002 (Пн) 14:52
Откуда: Russia

Сообщение MadChild » 20.02.2008 (Ср) 19:51

Создал вообще левую базу, с одной таблицей и полем.
При попытке вставить данные возникает та же ошибка.

Может быть дело в самой процедупе подключения?

Код: Выделить всё
        ' Попытка подключения к базе данных
        On Error Resume Next
        Set wrkJet = CreateWorkspace("", "Admin", "", dbUseJet)
        Set db = wrkJet.OpenDatabase(.DBPath, False, False, "MS Access;PWD=" & .DBPass)

MadChild
Обычный пользователь
Обычный пользователь
 
Сообщения: 84
Зарегистрирован: 04.03.2002 (Пн) 14:52
Откуда: Russia

Сообщение MadChild » 20.02.2008 (Ср) 19:54

alibek писал(а):Да пароль тут не причем.
Ну... попробуй еще кавычки на двойные заменить. Может быть в DAO строки в двойных должны указываться.

Результат тот же. А что это за параметор - dbUseJet? За что он отвечает и какие еже тут можно писать значения?

HandKot
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 28.06.2006 (Ср) 13:34
Откуда: Sergiev Posad

Сообщение HandKot » 21.02.2008 (Чт) 8:48

если не ошибаюсь, то OpenRecordset не позволяет использовать конструкции кроме SELECT, поэтому и ошибка

для этого используйте метод Execute

Код: Выделить всё
Sub InsertIntoX1()

    Dim dbs As Database

    ' Modify this line to include the path to Northwind
    ' on your computer.
    Set dbs = OpenDatabase("Northwind.mdb")
   
    ' Select all records in the New Customers table
    ' and add them to the Customers table.
    dbs.Execute " INSERT INTO Customers " _
        & "SELECT * " _
        & "FROM [New Customers];"
       
    dbs.Close

End Sub

или еслы вы не хотите менять код, тогда для вашего кода

Код: Выделить всё
  Set rs = db.OpenRecordset("select * from Clients")
  rs.addnew
  rs.field("KlientFIO") = ...
  ...
  rs.Update
I Have Nine Lives You Have One Only
THINK!

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 21.02.2008 (Чт) 8:54

HandKot писал(а):если не ошибаюсь, то OpenRecordset не позволяет использовать конструкции кроме SELECT, поэтому и ошибка

:oops:
Да, это так. Совсем забывать DAO стал.
Lasciate ogni speranza, voi ch'entrate.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 21.02.2008 (Чт) 12:09

alibek писал(а):
HandKot писал(а):если не ошибаюсь, то OpenRecordset не позволяет использовать конструкции кроме SELECT, поэтому и ошибка

:oops:
Да, это так. Совсем забывать DAO стал.


Ну, вообще-то и в ADO так-же... :lol:
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

MadChild
Обычный пользователь
Обычный пользователь
 
Сообщения: 84
Зарегистрирован: 04.03.2002 (Пн) 14:52
Откуда: Russia

Сообщение MadChild » 21.02.2008 (Чт) 20:48

Большое спасибо! Очень помогло, всё превосходно работает.

Всех благ.


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 207

    TopList