запись инфы в БД Access

Тема в разделе "Visual Basic", создана пользователем Alex77777, 25 окт 2007.

  1. Alex77777

    Alex77777 Гость

    Всем доброго времени суток!
    Вопрос такой как можно из формы которая имеет тексбоксы, комбобоксы и т.д. вставлять информацию в БД Access в нужные мне поля, причем так, чтобы в БД находилась пустая строка и вставка производилась из всех текстбоксов в эту строку. У меня получается подсоединить БД к форме, в принципе там и можно делать редактирование, но в этом случае отображается вся инфа в БД, а мне этого не нужно. Помогите кто знает или подскажите где об этом можно почитать.
     
  2. Over

    Over Well-Known Member

    Регистрация:
    4 июл 2007
    Сообщения:
    116
    Симпатии:
    0
    Для этих целей лучше через ADO работать. Подключить базу как объект. А потом получить инфу из формы, сформировать SQL-запрос на вставку данных, и отправить его в базу.
    Читать: ADO - подключение/отключение базы, Visual Basic - работа с объектами ADO, SQL - язык запросов, ключевое слово INSERT
     
  3. Alex77777

    Alex77777 Гость

    Как подключаться к БД я знаю, знаю как отобразить данные из БД на форме
    а вот когда я пытаюсь вставить что то в БД то он пишет ошибку, вот код, кто знает подскажите в чем суть

    На форме расположил 3 текстбокса и одну кнопку
    В меню-проекты-ссылкы подключил MicrosoftDAO 3.51 object Library
    и написал в код

    Private Sub Command1_click()
    Dim db As Connection
    Set db = New Connection
    db.CursorLocation = adUseClient
    db.Open "PROVIDER=Microsoft.Jet.OLEDB.3.51;Data Source=C:\Данные о визитах\2-97.mdb;"

    insert таблица1 (поле1, поле2, поле3)
    values (txtText.text, txtText1.text, txtText2.text)

    db.Close

    end sub

    в этом блоке выдает что неккоректно прописаны значения которые нужно вставить в поля,
    а при запуске проги выдает ошибку "invalid use of new keyword" и подсвечивает строку "Set db = New Connection"

    пробовал вместо insert ставить этот блок
    db.Recordset.AddNew
    db.Recordset![поле1] = txtText.Text
    db.Recordset![поле2] = txtText1.Text
    db.Recordset![поле3] = txtText2.Text
    db.Recordset.Update

    вопрос: как правильно сделать вставку в БД? и нужны ли еще какие-то дополнительно компоненты устанавливать на форму (имеется ввиду для соединения с БД)?
     
  4. Alex77777

    Alex77777 Гость

    пробовал и так

    Private Sub Command1_click()
    Dim db As ADODB.Connection
    db.Open "PROVIDER=Microsoft.Jet.OLEDB.3.51;Data Source=C:\Данные о визитах\2-97.mdb;"

    insert таблица1 (поле1, поле2, поле3)
    values (txtText.text, txtText1.text, txtText2.text)

    db.Close
    end sub

    он пишет: "Ошибка компиляции: Sub or Function not defined"


    везде где читал про вставку данных в БД, пишут вот такой алгоритм

    insert into имя_таблицы (поле1, поле2, поле3)
    values ("значение1", "значение2", "...")

    в этом случае он пишет: "Ошибка компиляции: end of statement"

    Помогите разобраться в этом. Не могу понять где ошибка! Мучаюсь уже с неделю над этим вопросом!
    Заранее спасибо!
     
  5. Ghost in the shell

    Ghost in the shell Гость

    пример SQL запроса из одной моей программы
    Код (Text):
    Dim oleConnect As New OleDb.OleDbConnection
    Dim oleCommanda As New OleDb.OleDbCommand
    oleConnect.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & CurDir() & ";Extended Properties=dBASE IV;User ID=Admin;Password="
    oleCommanda.Connection = oleConnect
    oleCommanda.CommandType = CommandType.Text
    oleCommanda.CommandText = "CREATE TABLE pro (tabn CHARACTER(4), VO CHARACTER(2), VO_V CHARACTER(2), DATO CHARACTER(7), SHIFR CHARACTER(8), DNI NUMERIC(3,0), tim NUMERIC(7), 'sum' NUMERIC(13), DAT_DOC DATE)"
    oleConnect.Open()
    oleCommanda.ExecuteNonQuery()
    oleConnect.Close()
    MessageBox.Show("Таблица создана.")
    я думаю ты поймешь в чем у тебя ошибка...
     
  6. Normann

    Normann Well-Known Member

    Регистрация:
    9 авг 2007
    Сообщения:
    168
    Симпатии:
    2
    Переменная db не была инициализирована перед ее использованием. Сначала нужно выделить память под объект а потом уже его использовать:

    Код (Text):
    dim db as ADODB.Connection

    set db = New ADODB.Connection
    ' а потом уже всякие манипуляции с объектом
    <!--QuoteBegin-Alex77777+31:10:2007, 09:03 -->
    <span class="vbquote">(Alex77777 @ 31:10:2007, 09:03 )</span><!--QuoteEBegin-->везде где читал про вставку данных в БД, пишут вот такой алгоритм

    insert into имя_таблицы (поле1, поле2, поле3)
    values ("значение1", "значение2", "...")
    [snapback]83705" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Это SQL-запрос, а не программный код. Его нужно строкой передавать провайдеру или подключению не знаю как там правильно, но не суть важно. Сделать это можно вот так:
    Код (Text):
    db.Execute "INSERT INTO имя_таблицы (поле1, поле2, поле3) VALUES ('значение1', 'значение2', '...')"
    А вообще чтобы засунуть значения в уже имеющуюся таблицу нужно делать так:
    Код (Text):
    db.Execute "UPDATE имя_таблицы SET поле1='значение1', поле2='значение2', полеN='...'"
    Можно еще рекордсеты использовать но этот способ помоему попроще будет

    ЗЫ msaccess хорошо запросы составляет
     
  7. Alex77777

    Alex77777 Гость

    Для sax_ol:
    Огромное спасибо за ссылку!!! То что надо было.

    Для Normann:
    Отдельное спасибо за расшифровку моих ошибок.
     
  8. Alex77777

    Alex77777 Гость

    Я все еще пытаюсь вставить данные из формы в таблицу :((
    на форме есть текстбоксы и чтобы вставить из них информацию я
    прописываю:
    Dim d As String
    d=txtText.Text
    и вот эту переменную (вернее ее значение мне и нужно запихать в БД)
    но все значения в SQL-запросах нужно вводить в кавычках (в этом случае в БД вставляется буква d),
    для этого рекомендуется использовать соответствующую функцию:

    Private Function Quote(strVariable As String)
    As String
    Quote = “ ‘ “ & strVariable & “ ‘ “
    End Function

    затем пишу:

    Private Sub Command1_click()

    dim db as ADODB.Connection
    dim rs As Recordset
    dim d = txtText.Text
    dim d = txtText1.Text

    set db = New ADODB.Connection
    With db
    .Provider = "Microsoft.Jet.OLEDB.3.51"
    .Open "Data Source = C:\basa.mdb"
    End With

    Set rs= db.OpenRecordset ("insert имя_таблицы [поле1]=" & Quote (d))

    комп ругается: ошибка 3001, аргументы имеют неверный тип, выходят за пределы допустимого диапазона или вступают в конфликт друг с другом, подсвечивает "Set rs= db.OpenRecordset ("insert имя_таблицы [поле1]=" & Quote (d))"

    я еще в код вписывал и это

    db.Recordset.AddNew
    db.Recordset! [поле1] = txtText.Text
    db.Recordset! [поле2] = txtText1.Text
    db.Recordset.Update

    но он все равно пишет ошибку 3001 и подсвечивает "db.Recordset.AddNew"
    Normann раскажи про рекордсеты поподробнее плиз!
     
  9. Over

    Over Well-Known Member

    Регистрация:
    4 июл 2007
    Сообщения:
    116
    Симпатии:
    0
    Если у тебя в запросе должны присутствовать кавычки, тогда для этого используй функцию Chr(), параметр - код символа. Для кавычек этот код будет равен 34 (другие коды можно быстро узнать в "таблице символов" Пуск - Программы - Стандартные - Служебные - Таблица символов, выбрать шрифт System). Вот пример:
    Код (Text):
    Query = "SELECT pole1 FROM table WHERE pole2 = " & Chr(34) & "SonyEricsson" & Chr(34)
    Таким образом в результирующей строке выражение "SonyEricsson" будет заключено в кавычки.
     
  10. Alex77777

    Alex77777 Гость

    для Over:
    если я правильно понимаю "SonyEricsson" это не переменная а какое то значение?

    согласно "Программы - Стандартные - Служебные - Таблица символов" код символа " ' " равен 27 а не 34.

    кстати везде где бы я ни искал примеры в основном с опретором SELECT, а с оператором INSERT пратически нет.

    Private Sub Command1_click()

    dim db as ADODB.Connection
    dim d = txtText.Text
    dim d = txtText1.Text

    set db = New ADODB.Connection
    With db
    .Provider = "Microsoft.Jet.OLEDB.3.51"
    .Open "Data Source = C:\basa.mdb"
    .Execute _
    "insert into Tabl1 (дата, номер) values (" & Chr(27) & d & Chr(27) & "," & Chr(27) & s & Chr(27) &")"
    End With
    db.Close
    End Sub

    выдает ошибку: Синтаксическая ошибка в выражении запроса 'Text'
    мне нужно вместо обычного значения вставлялось значение переменной которое ей присвоено в данный момент.
     
  11. Alex77777

    Alex77777 Гость

    если я поставлю в строку
    db.Execute "INSERT INTO имя_таблицы (поле1, поле2) VALUES ('значение1', 'значение2')"

    вместо "значения1" свою переменную dim d = txtText.Text
    то получится следующее:
    db.Execute "INSERT INTO имя_таблицы (поле1, поле2) VALUES ('d', 's')"
    в этом случае в БД будет вставлены соответственно сами буквы "d" и "s", а мне нужно что бы вставлялся текс из текстбокса.
     
  12. Tanya

    Tanya Гость

    dim d
    d = txtText.Text
    s = txtText2.Text

    db.Execute "INSERT INTO имя_таблицы (поле1, поле2) VALUES (' " & d & " ', ' " & s & " ')"

    должно работать так как ты хочешь, посмотри внимательнее у себя в написании
     
  13. Over

    Over Well-Known Member

    Регистрация:
    4 июл 2007
    Сообщения:
    116
    Симпатии:
    0
    Разберись с кавычками. Есть кавычки двойные, есть знак "апостроф - ' " Напиши сначала нужный запрос вручную, и попробуй, чтоб он у тебя работал, а потом всякие спецсимволы замени на Chr(...) и подставляй в программу.
     
  14. Alex77777

    Alex77777 Гость

    Tanya огромное спасибо за подсказку!!!
    Все работете так как и хотел.
     
Загрузка...

Поделиться этой страницей