ADO.net... добавить строку в таблицу в базе Access

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

starkee
Новичок
Новичок
Аватара пользователя
 
Сообщения: 25
Зарегистрирован: 13.11.2007 (Вт) 14:56
Откуда: Ростов-на-Дону

ADO.net... добавить строку в таблицу в базе Access

Сообщение starkee » 21.05.2008 (Ср) 11:51

Товарищи!
Помогите, пжл... что-то я совсем ничего не понимаю, и без вашей квалифицированной поддержки не обойтись...

Проблема в следующем:
Хочу тупо добавить строчку в таблицу БД (база в Access'е). Соответственно, пишу следующий код:
Код: Выделить всё
ConStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\Baza.mdb"
        cn = New OleDb.OleDbConnection(ConStr)
        cn.Open()

        Dim ds As DataSet
        Dim cb As OleDb.OleDbCommand
        Dim dogovorDt As DataTable
        Dim dogovorDa As OleDb.OleDbDataAdapter

        ds = New DataSet

        dogovorDt = New DataTable("Договоры")
        dogovorDa = New Data.OleDb.OleDbDataAdapter("SELECT * FROM Договоры", cn)
        dogovorDa.FillSchema(dogovorDt, SchemaType.Source)
        dogovorDa.Fill(dogovorDt)
        ds.Tables.Add(dogovorDt)

        cb = New OleDb.OleDbCommand()
        cb.Connection = cn
        cb.CommandText = "INSERT INTO Договоры (ЛимитКредитаРуб, ЛимитКредитаДни, ДатаДоговора, IDDКлиента) VALUES ('300000','45','25.04.08', '1')"
        cb.CommandType = CommandType.Text
        cb.ExecuteNonQuery()

        dogovorDa.InsertCommand = cb
        dogovorDa.Update(dogovorDt)


Подскажите, пжл, что не так? Ошибку не выдает, компилирует нормально, в DataSet заносит, а в базу -НЕТ!!! Вообще я голову уже сломала просто... Help me, please....

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 21.05.2008 (Ср) 11:56

cb.ExecuteNonQuery()

после этого смотри exception-ы, есть подозрение, что у тебя поле дата неправильно заполняется.

starkee
Новичок
Новичок
Аватара пользователя
 
Сообщения: 25
Зарегистрирован: 13.11.2007 (Вт) 14:56
Откуда: Ростов-на-Дону

Сообщение starkee » 22.05.2008 (Чт) 8:08

т.е вы хотите сказать, что синтаксис верный????.... ок... ну я попробую на примере другой таблицы, где нет полей типа ДАТА.... а еще не очень поняла, что значит "смотри exeptionы" :oops: ?...

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Сообщение Денис » 22.05.2008 (Чт) 8:48

starkee
что значит "смотри exeptionы" ?


Смотри сообщения об ошибках и тщательно, буковка в буковку, переписывай сюда нам на форум.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

starkee
Новичок
Новичок
Аватара пользователя
 
Сообщения: 25
Зарегистрирован: 13.11.2007 (Вт) 14:56
Откуда: Ростов-на-Дону

Сообщение starkee » 22.05.2008 (Чт) 9:22

говорю же, нет сообщений об ошибках, в том -то и дело....
попробую на другой таблице, тогдавам сообщу результат, если проблема не в синтаксисе...
может SQL-запрос неверный... по синтаксису?...

Lexa
Новичок
Новичок
 
Сообщения: 29
Зарегистрирован: 17.11.2005 (Чт) 0:13
Откуда: Тверь

Сообщение Lexa » 22.05.2008 (Чт) 10:17

starkee Код вообще о чём ?

в DataSet заносит

Имеется ввиду SELECTом заполняется таблица и DataSet ?

Не импользуется ли процедурка с блоком try ? Ибо запрос вызывает сомнения. Числа обычно не хранятся в строковом формате, а дата в Акссев ХП, у меня только через #dd/mm/yyyy# заносит. Это раз.Код обновления через адаптер логически не правилен, INSERT будет вызывался для любой Added записи, но ни одной Added записи в коде не появляется, соответственно ни одной INSERT комманды выполнятся не будет. Это два. cb.ExecuteNonQuery() должен быть выполнен, ежели нет ошибок см. первый пункт. Это три. Попробуй данный запрос написать в Аксесе, если прокатит, смотри п.1.Это четыре ...

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Сообщение SLIM » 22.05.2008 (Чт) 21:04

"INSERT INTO Договоры (ЛимитКредитаРуб, ЛимитКредитаДни, ДатаДоговора, IDDКлиента) VALUES ('300000','45','25.04.08', '1')"

Правда не знаю как выглядит в VB, но в VBA можно сделать так

"INSERT INTO TABLE1(First,Second,....) select 3000 as f1, 45 as f2.....;"

А вообще нужно смотреть акцесс в режиме SQL
Пишите жизнь на чистовик.....переписать не удастся.....

starkee
Новичок
Новичок
Аватара пользователя
 
Сообщения: 25
Зарегистрирован: 13.11.2007 (Вт) 14:56
Откуда: Ростов-на-Дону

Сообщение starkee » 23.05.2008 (Пт) 10:05

Lexa писал(а):Имеется ввиду SELECTом заполняется таблица и DataSet ?


В общем попробовала я в Accesse сделать запрос на добавление... И о ужас, насколько я поняла - добавить запись в одну таблицу можно только из другой таблицы....
т.е. select'ом, как говорилрсь выше, а мне это не подходит...

Объясните, пжл, как просто тупо добавить новую строчку в базу Access? Если у меня есть формочка с полями, и я хочу, чтобы по нажатию на эту кнопочку данные из моих полей занеслись в таблицу... Что мне нужно использовать? Я так думала, что в DataAdapter'е есть такая фишка InsertCommand, но как ни крути, у меня не получилось добавить запись в таблицу... Help me, please...

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Сообщение SLIM » 23.05.2008 (Пт) 21:15

данные из моих полей занеслись в таблицу... Что мне нужно использовать?

Код: Выделить всё
"Insert into Table(1,2,3,4,5) select' " & поле1 & " ' as f1 , ' " & поле2 & " ' as f2 ........;"

f1 и f2 определять не нужно. По окончании конструкции select слово from добавлять не нужно. После обязатьльно Update сделай.

В общем попробовала я в Accesse сделать запрос на добавление... И о ужас, насколько я поняла - добавить запись в одну таблицу можно только из другой таблицы....

Ты далеко не права.
При добавлении простых чисел это выглядит так :
Код: Выделить всё
INSERT INTO Base_Client ( Cust, Addr, Marsh )
SELECT 3000 AS Выражение1, 45 AS Выражение2, [плохо] AS Выражение3;

Инструкции SQL наверное на Любой платформе остануться едиными...
Пишите жизнь на чистовик.....переписать не удастся.....

starkee
Новичок
Новичок
Аватара пользователя
 
Сообщения: 25
Зарегистрирован: 13.11.2007 (Вт) 14:56
Откуда: Ростов-на-Дону

Сообщение starkee » 26.05.2008 (Пн) 10:27

оу, класс!!! спасибо большое, SLIM!!! сегодня попробую ваш метод и обязательно сообщу результат!!!

Emzari
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 129
Зарегистрирован: 06.09.2002 (Пт) 9:08
Откуда: Georgia

Re: ADO.net... добавить строку в таблицу в базе Access

Сообщение Emzari » 20.10.2008 (Пн) 17:57

можно вот так

Код: Выделить всё
   Imports System.Data
   Imports System.Data.OleDb


   Private Sub cbAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbAdd.Click

        Dim myBuilder As New OleDbConnectionStringBuilder
        myBuilder("Data Source") = "путь к твоеи базе данных"
        myBuilder.Add("Provider", "Microsoft.Jet.Oledb.4.0")

        Dim strSaxeli, strGvari, strTanamdeboba, strMisamarti As String
        Dim strTelefoni, strMobiluri As String
        Dim DabTarigi As Date

        strSaxeli = RTrim(LTrim(txtSaxeli.Text))
        strGvari = RTrim(LTrim(txtGvari.Text))
        strTanamdeboba = RTrim(LTrim(txtTanamdeboba.Text))
        strMisamarti = RTrim(LTrim(txtMisamarti.Text))
        strTelefoni = RTrim(LTrim(txtTelefoni.Text))
        strMobiluri = RTrim(LTrim(txtMobiluri.Text))
        DabTarigi = dtpDabTarigi.Value.Date

        Dim myCon As New OleDbConnection(myBuilder.ConnectionString)
        Try
            myCon.Open()
            Dim myCommand As OleDbCommand = myCon.CreateCommand()
            Dim strSQL As String
            strSQL = "INSERT INTO Tanamshromlebi (Saxeli, Gvari, DabTarigi, Misamarti, Tanamdeboba, Tel, Mob) " & _
                     "VALUES (@Saxeli, @Gvari, @DabTarigi, @Misamarti, @Tanamdeboba, @Tel, @Mob)"
            Dim cmdInsert As New OleDbCommand(strSQL, myCon)
            cmdInsert.Parameters.AddWithValue("@Saxeli", strSaxeli)
            cmdInsert.Parameters.AddWithValue("@Gvari", strGvari)
            cmdInsert.Parameters.AddWithValue("@DabTarigi", DabTarigi)
            cmdInsert.Parameters.AddWithValue("@Misamarti", strMisamarti)
            cmdInsert.Parameters.AddWithValue("@Tanamdeboba", strTanamdeboba)
            cmdInsert.Parameters.AddWithValue("@Tel", strTelefoni)
            cmdInsert.Parameters.AddWithValue("@Mob", strMobiluri)

            cmdInsert.ExecuteNonQuery()
        Catch ex As Exception
            MsgBox("Ошибка!" & vbLf & ex.Message, MsgBoxStyle.Critical)
        Finally
            myCon.Close()
        End Try
    End Sub

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re:

Сообщение iGrok » 20.10.2008 (Пн) 19:57

SLIM писал(а):"INSERT INTO TABLE1(First,Second,....) select 3000 as f1, 45 as f2.....;"

О господи.. Зачем же так жестоко-то?? 0_O

Код: Выделить всё
INSERT INTO [tablename] (column1, column2, column3...) VALUES (value1, value2, value3...)

Это стандартная форма SQL запроса на вставку. Работает везде.

Значения valueX, если тип колонки - строка, нужно заключать в одинарные кавычки, как изначально было записано. Дату тоже в кавычках. Остальное - без кавычек.

Код: Выделить всё
INSERT INTO [tab] ([v_text], [v_int], [v_date], [v_bool]) VALUES ('text',10,'20/10/08',true)

Только что проверен в акцессе 2003. Имена таблиц и колонок заключены в квадратные скобки "для порядку", если использовать зарезервированное слово в кач-ве имени таблицы или колонки, достучаться до него можно будет только так. Типы полей в указанном запросе понятны из названий полей. )

В принципе, акцесс дату и с "." вместо "/" понял.
label:
cli
jmp label


Вернуться в Visual Basic .NET

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

Сейчас этот форум просматривают: Mail.ru [бот] и гости: 99

    TopList