1. Мегаконкурс в апреле "Приведи друзей на codeby". Дарим деньги, подписку на журнал хакер и выдаем статус "Paid Access". Подробнее ...

    Скрыть объявление

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

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

Наш партнер Genesis Hackspace
  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 огромное спасибо за подсказку!!!
    Все работете так как и хотел.
     
Загрузка...

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