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

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

  1. Alex77777

    Alex77777 Гость

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

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

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

    начало
    проверяем
    если в текстбоксе нет цифры то
    просто сохраняем инфу в БД
    иначе
    находим в БД строку с такой же цифрой и вставляем в нее данные
    конец
     
  2. Over

    Over Well-Known Member

    Регистрация:
    4 июл 2007
    Сообщения:
    116
    Симпатии:
    0
    Для Alex77777: Так а в чём проблема? Ты ведь и сам знаешь, как всё делать. Алгоритм ты написал правильно. Тебе подсказать команды SQL? Вот, на всякий случай, если вдруг не знаешь: SELECT - для выборки данных, INSERT - для вставки новых данных, UPDATE - для изменения данных в БД. При этом твой алгоритм уточнится до такого:
    Код (Text):
    начало
    проверяем
    если в текстбоксе нет цифры то
    просто сохраняем инфу в БД
    { INSERT INTO...... //Вставка данных
    //А теперь нужно получить ID, для этого сделаем SELECT
    SELECT ID FROM ..... WHERE .......
    //После этого выбранный ID присваиваем в переменную и её значение засовываем в TextBox2
    }
    иначе
    находим в БД строку с такой же цифрой...
    {
    SELECT ... FROM <TableName> WHERE Цифра = введённой
    }
    ... и вставляем в нее данные
    {
    UPDATE <TableName>
    SET <имя_поля> = ....
    WHERE условия отбора записи
    }
    конец
    Естественно, в программе тебе нужно будет работать через ADO, и запросы формировать в виде строки, а потом вызывать метод Query.Execute (или Query.Open для запроса SELECT).
     
  3. skysun

    skysun Гость

    Код (Text):
     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
     
  4. Alex77777

    Alex77777 Гость

    для sax_ol

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

    Гляди не жалко!!!
    Код (Text):
    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

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

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

    Код (Text):
     set rs.OpenRecordset ("SELECT ID FROM имя_табл WHERE поле1 = ' " & d & " ' ")
    тексбокс2.AddItem rs.Fields ("d")
    так комп ругается: Арнгументы имеют неверный тип, выходят за пределы допустимого диапазона или всл=тупают в конфликт друг с другом.
    и подчеркивает строку set rs.OpenRecordset ("SELECT ..........
     
  5. Over

    Over Well-Known Member

    Регистрация:
    4 июл 2007
    Сообщения:
    116
    Симпатии:
    0
    А есть ещё такой объект 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-запроса. Сначала напиши его вручную, в блокноте или др., подставь туда реальные значения, и попробуй выполнить его в аксессе. Если всё будет ок, тогда заменяй значения на переменные и вставляй в прогу.
     
  6. Normann

    Normann Well-Known Member

    Регистрация:
    9 авг 2007
    Сообщения:
    168
    Симпатии:
    2
    Тебе все еще нужна помощь по ADO?
     
  7. Alex77777

    Alex77777 Гость

    всем привет!
    не было времени на форум взглянуть.
    да с данным вопросом я еще не полностью разобрался(только еще пытаюсь освоить VB & Access):

    вопрос1 что такое "объект QueryDef", можно о нем поподробнее.
    вопрос2 как проверить работу запроса в саом аксессе.
     
  8. Normann

    Normann Well-Known Member

    Регистрация:
    9 авг 2007
    Сообщения:
    168
    Симпатии:
    2
    На счет QuerryDef я ничего не знаю, это не из ADO, а вот про аксес расскажу. Открываешь базу, в разделе "Объекты" (меню-колонка слева) открываешь "Запросы", создаешь запрос в режиме конструктора, если умеешь то ресуешь его руками, если тебе это не нужно то тогда просто находишь на панели кнопку под названием "Вид" (она имеет вид миниатюрной таблицы (грид)), жмешь на стрелку и выбираешь в выпавшем меню "Режим SQL" и окно конструктора твоего запроса превращается в текстовый редактор для SQL запроса, отражающий наделанное тобой в конструкторе, редактируешь это дело или вставляешь и лучше с начала перейти обратно в режим конструктора, чтобы посмотреть что Аксес скажет, потом таким же методом переходишь в "Режим таблицы" и она тебе покажет что-то похожее на результат работы запроса, т.е. выбранные данные или те которые должны будут удалиться согласно запросу или обновиться или еще чтото. Если не заругался то изучай его "правильность на свой взгляд". Там же можно и выполнить этот запрос по настоящему - на той же панели есть кнопка в виде восклицательного знака, называется "Выполнить". Надеюсь я нормально объяснил.
     
  9. Over

    Over Well-Known Member

    Регистрация:
    4 июл 2007
    Сообщения:
    116
    Симпатии:
    0
    Про объект QueryDef можно прочитать в справке по VBA. Заходишь в редактор VBA в экселе или аксессе - не важно, нажимаешь F1, вылазит справка, делаешь поиск по названию QueryDef. Должно выдать строку QueryDef Object (DAO). Кликаешь на неё - вылазит справка. Читаешь, вникаешь.
     
  10. Alex77777

    Alex77777 Гость

    для Normann спасибо за подсказку по аксесу, теперь комп вроде не ругается при выполнении запроса

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


    в итогеполучилось вот такой код:
    Код (Text):
    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" присвоить переменной.
     
Загрузка...
Похожие Темы - База данных
  1. Zhuk
    Ответов:
    18
    Просмотров:
    1.959
  2. ALEXandr2033
    Ответов:
    0
    Просмотров:
    1.078
  3. Apoka5555
    Ответов:
    0
    Просмотров:
    1.574
  4. Anneta
    Ответов:
    1
    Просмотров:
    1.705
  5. Delete
    Ответов:
    4
    Просмотров:
    2.036

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