• 🔥 Бесплатный курс от Академии Кодебай: «Анализ защищенности веб-приложений»

    🛡 Научитесь находить и использовать уязвимости веб-приложений.
    🧠 Изучите SQLi, XSS, CSRF, IDOR и другие типовые атаки на практике.
    🧪 Погрузитесь в реальные лаборатории и взломайте свой первый сайт!
    🚀 Подходит новичкам — никаких сложных предварительных знаний не требуется.

    Доступ открыт прямо сейчас Записаться бесплатно

База данных и Vb

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

Alex77777

Всем доброе утро!!!

Тема такая: есть прога из нее данные вставляются в БД ACCESS.
При создании любой таблицы в БД ACCESS автоматом создается доп.поле "код_ID"
На форме есть текстбокс1, текстбокс2 и клавиша сохранить. Мне нужно чтобы при нажатии клавиши "сохранить" данные из текстбокса1 вставлялись БД (это я знаю как делать), и в это же время нужно чтобы в текстбокс2 вставиласть цифра, которая стоит в поле "код_ID" БД.
Вопрос 1: как это сделать?
Вопрос 2: как потом, если данные в текстбоксе1 я поменял, сделать при нажатии клавиши "сохранить", чтобы данные из текстбокс1 снова вставились в уже существующей строке той же таблицы БД ACCESS с номером ID, который вставился в текстбокс2.

как я понимаю при вставке данных в БД он вставляет их в последнюю строку и ей автоматом присваиваеся ID.то есть схема кода при нажатии "сохранить" получается такой:

начало
проверяем
если в текстбоксе нет цифры то
просто сохраняем инфу в БД
иначе
находим в БД строку с такой же цифрой и вставляем в нее данные
конец
 
Для Alex77777: Так а в чём проблема? Ты ведь и сам знаешь, как всё делать. Алгоритм ты написал правильно. Тебе подсказать команды SQL? Вот, на всякий случай, если вдруг не знаешь: SELECT - для выборки данных, INSERT - для вставки новых данных, UPDATE - для изменения данных в БД. При этом твой алгоритм уточнится до такого:
Код:
начало
проверяем 
если в текстбоксе нет цифры то
просто сохраняем инфу в БД
{ INSERT INTO...... //Вставка данных
//А теперь нужно получить ID, для этого сделаем SELECT
SELECT ID FROM ..... WHERE .......
//После этого выбранный ID присваиваем в переменную и её значение засовываем в TextBox2
}
иначе
находим в БД строку с такой же цифрой...
{
SELECT ... FROM <TableName> WHERE Цифра = введённой
}
... и вставляем в нее данные
{
UPDATE <TableName>
SET <имя_поля> = ....
WHERE условия отбора записи
}
конец
Естественно, в программе тебе нужно будет работать через ADO, и запросы формировать в виде строки, а потом вызывать метод Query.Execute (или Query.Open для запроса SELECT).
 
Код:
 If ldb.rsResearch.State = 1 Then ldb.rscmdTmp.Close
ldb.rsResearch.Open SQLStr, , , adLockOptimistic, adCmdText
If (ldb.rsResearch.EOF = True) And (ldb.rsResearch.BOF = True) Then
ldb.rsResearch.AddNew

ldb.rsResearch![FieldName] = anyValue

Else
ldb.rsResearch![FieldName] = anyValue
ldb.rsResearch.Update
End If
 
для sax_ol

Цитата(Alex77777 @ 14:11:2007, 08:08 )

попробуй в Access'e сделать БД в режиме ввода дынных, и самый последний столбец и будет "_ID" (он просто скрыт, возьми кусором и растащи его

можно взглянуть?

Гляди не жалко!!!
Код:
Private Sub Command1_Click()
Dim db As New adodb.Connection

Dim d As String
Dim s  As String
d = txtText.Text
s = txtText1.Text

Set db = New adodb.Connection

With db
.Provider = "Microsoft.Jet.OLEDB.3.51"
.Open "Data Source=C:\БД.mdb;"
.Execute _
"insert into имя_таблицы (поле1,поле2) values (' " & d & " ',' " & s & " ')"
End With
db.Close
End Sub

для Over

После этого выбранный ID присваиваем в переменную и её значение засовываем в TextBox2

ссори не совсем правильно поставил вопрос:
вопрос собственно и заключался в том, как результат запроса присвоить переменной из SQL-запроса (как вставить переменную в него я знаю).

пробовал через рекордсеты не получается

Код:
 set rs.OpenRecordset ("SELECT ID FROM имя_табл WHERE поле1 = ' " & d & " ' ")
тексбокс2.AddItem rs.Fields ("d")

так комп ругается: Арнгументы имеют неверный тип, выходят за пределы допустимого диапазона или всл=тупают в конфликт друг с другом.
и подчеркивает строку set rs.OpenRecordset ("SELECT ..........
 
А есть ещё такой объект QueryDef. У него свойство SQL - строка SQL-запроса. Есть ещё у него метод OpenRecordset, который выполняет запрос и возвращает объект результирующий Recordset. К полям рекордсета можно доступиться через свойство Fields.
В итоге:
1. Создать объект QueryDef
2. Присвоить свойству .SQL строку SQL-запроса
3. Вызвать метод .OpenRecordset с присвоением результата новосозданному объекту типа RecordSet
4. Обратиться к свойству .Fields(индекс поля) объекта Recordset получив таким образом нужное нам значение, и присвоить его в переменную
5. Установить значение ТекстБокса2 = значению переменной
6. Закрыть рекордсет (метод Close)
7. Закрыть QueryDef

P.S. Проверь правильность синтаксиса SQL-запроса. Сначала напиши его вручную, в блокноте или др., подставь туда реальные значения, и попробуй выполнить его в аксессе. Если всё будет ок, тогда заменяй значения на переменные и вставляй в прогу.
 
всем привет!
не было времени на форум взглянуть.
да с данным вопросом я еще не полностью разобрался(только еще пытаюсь освоить VB & Access):

вопрос1 что такое "объект QueryDef", можно о нем поподробнее.
вопрос2 как проверить работу запроса в саом аксессе.
 
На счет QuerryDef я ничего не знаю, это не из ADO, а вот про аксес расскажу. Открываешь базу, в разделе "Объекты" (меню-колонка слева) открываешь "Запросы", создаешь запрос в режиме конструктора, если умеешь то ресуешь его руками, если тебе это не нужно то тогда просто находишь на панели кнопку под названием "Вид" (она имеет вид миниатюрной таблицы (грид)), жмешь на стрелку и выбираешь в выпавшем меню "Режим SQL" и окно конструктора твоего запроса превращается в текстовый редактор для SQL запроса, отражающий наделанное тобой в конструкторе, редактируешь это дело или вставляешь и лучше с начала перейти обратно в режим конструктора, чтобы посмотреть что Аксес скажет, потом таким же методом переходишь в "Режим таблицы" и она тебе покажет что-то похожее на результат работы запроса, т.е. выбранные данные или те которые должны будут удалиться согласно запросу или обновиться или еще чтото. Если не заругался то изучай его "правильность на свой взгляд". Там же можно и выполнить этот запрос по настоящему - на той же панели есть кнопка в виде восклицательного знака, называется "Выполнить". Надеюсь я нормально объяснил.
 
Про объект QueryDef можно прочитать в справке по VBA. Заходишь в редактор VBA в экселе или аксессе - не важно, нажимаешь F1, вылазит справка, делаешь поиск по названию QueryDef. Должно выдать строку QueryDef Object (DAO). Кликаешь на неё - вылазит справка. Читаешь, вникаешь.
 
для Normann спасибо за подсказку по аксесу, теперь комп вроде не ругается при выполнении запроса

для Over смотрел справку, создалось такое впечасление что QueryDef и рекордсет практически одно и тоже.


в итогеполучилось вот такой код:
Код:
Dim db As New adodb.Connection

Dim d As String
Dim s  As String
Dim ID  As String
d = txtText.Text
s = txtText1.Text
ID=txtID.Text
Set db = New adodb.Connection
With db
.Provider = "Microsoft.Jet.OLEDB.3.51"
.Open "Data Source=C:\БД.mdb;"
.Execute _
"insert into имя_таблицы (поле1,поле2) values (' " & d & " ',' " & s & " ')"

.Execute _
"SELECT имя_табл.ID FROM имя_табл WHERE (((имя_табл.поле1) = ' " & d & " ' ))"
ID = имя_табл.ID 
txtID.Text=ID
End with

пишет: ошибка 424, требуемый объект.
и подчеркивает строку "ID = имя_табл.ID"

получаается только одна загвоздка как итог запроса из поля "имя_табл.ID" присвоить переменной.
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab