• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

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

  • Автор темы Alex77777
  • Дата начала
A

Alex77777

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

Over

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

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

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

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"

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

Ghost in the shell

пример SQL запроса из одной моей программы
Код:
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("Таблица создана.")
я думаю ты поймешь в чем у тебя ошибка...
 
N

Normann

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

Код:
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-запрос, а не программный код. Его нужно строкой передавать провайдеру или подключению не знаю как там правильно, но не суть важно. Сделать это можно вот так:
Код:
db.Execute "INSERT INTO имя_таблицы (поле1, поле2, поле3) VALUES ('значение1', 'значение2', '...')"
А вообще чтобы засунуть значения в уже имеющуюся таблицу нужно делать так:
Код:
db.Execute "UPDATE имя_таблицы SET поле1='значение1', поле2='значение2', полеN='...'"
Можно еще рекордсеты использовать но этот способ помоему попроще будет

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

Alex77777

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

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

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 раскажи про рекордсеты поподробнее плиз!
 
O

Over

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

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'
мне нужно вместо обычного значения вставлялось значение переменной которое ей присвоено в данный момент.
 
A

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", а мне нужно что бы вставлялся текс из текстбокса.
 
T

Tanya

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

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

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

Over

Разберись с кавычками. Есть кавычки двойные, есть знак "апостроф - ' " Напиши сначала нужный запрос вручную, и попробуй, чтоб он у тебя работал, а потом всякие спецсимволы замени на Chr(...) и подставляй в программу.
 
A

Alex77777

Tanya огромное спасибо за подсказку!!!
Все работете так как и хотел.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!