Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > динамические запросы


Автор: Vidocq 17.1.2005, 14:58
как в ВБ6 пользоваться динамическими запросами типа
Код

SqlText = "SELECT * FROM TableName WHERE id=" & ID;

Использую DAO.

какие библиотеки для этого подключать?

Автор: Naghual 17.1.2005, 16:43
Цитата
Использую DAO.
какие библиотеки для этого подключать?

Так уже никаких и не надо. Ты же уже используеш ДАО!
Или я не понял вопрос?

Автор: Vidocq 17.1.2005, 16:49
2 Naghual
Нет, дело в том, что так как делаю я - не работает...
Аллах с ним (с ДАО:))!
я хочу понять, как ПРАВИЛЬНО писать такого рода запросы...

Автор: Exception 17.1.2005, 16:55
Это?
Код

Dim db As DAO.Database
Set db = OpenDatabase("c:\test.mdb")
Dim rs As DAO.Recordset
Dim SqlText As String
SqlText = "SELECT * FROM TableName WHERE id=" & ID;
Set rs = db.OpenRecordset(SqlText)

Автор: Gannibal 17.1.2005, 16:57
http://www.codenet.ru/progr/vbasic/index.php

Автор: Vidocq 17.1.2005, 17:41
2 Run-time error
Код

Dim db As DAO.Database
Set db = OpenDatabase("c:\test.mdb")
Dim rs As DAO.Recordset
Dim SqlText As String
SqlText = "SELECT * FROM TableName WHERE id=" & ID;
Set rs = db.OpenRecordset(SqlText)


вот так как раз и не работает, по крайней мере в цикле, где ID постоянно
изменяется

Автор: Akina 17.1.2005, 17:49
Цитата(Vidocq @ 17.1.2005, 18:41)
вот так как раз и не работает, по крайней мере в цикле, где ID постоянно изменяется

Чудеса, аднака... код - в студию. С указанием места и номера ошибки или неправильной выборки.

Автор: Naghual 17.1.2005, 17:56
Ага. А что такое "TableName"? Это так таблица называется?
smile

Автор: Vidocq 17.1.2005, 18:04
2 Naghual

ну да
ЗЫ. Ты чего, прикалуешься? ;)

Автор: Naghual 17.1.2005, 18:14
Да так. Обычно TableName это переменная, содержащая имя таблицы. Как переводится.
Возможно нужно написать так:
Код

SqlText = "SELECT * FROM " & TableName & " WHERE ID = " & ID


И потом. Что такое "ID;"? К чему там ";"?

Автор: Gannibal 17.1.2005, 21:07
а если вот так?

Использование SQL-запросов (Structured Query Language) для работы с БД в ваших программах.
Для демострации возможностей SQL мы создадим небольшую программу. Для этого: 1. Загрузите Visual Basic
2. Создайте Standart EXE
3. Щелкните на Project, Components и у вас появится список на экране. Выберите в этом списке 'Microsoft FlexGrid Control 6.0' и щелкните OK. Контрол под названием FlexGrid позволит нам показать ответы на вопросы, касающиеся баз данных.
3. Далее, добавьте следующие контролы в форму. Добавьте Text Box, Command Button, Data control и собственно, MSFlexGrid.
4. В окне Properties щелкните на свойстве 'DataSource'. Из появившегося списка выберите 'Data1'.
5. Измените свойство DatabaseName так, чтобы оно указывало на базу данных Nwind.mdb. Обычно она расположена в "C:\Program Files\Microsoft Visual Studio\VB98\Nwind.mdb"
6. Теперь вставьте следующий код:


Код

On Error GoTo ErrHandle
Data1.RecordSource = Text1.TextData1.Refresh
Exit Sub
ErrHandle:MsgBox "У нас проблемы!"


Отлично! Теперь я расскажу, как это работает

Во-первых, мы добавили контрол FlexGrid. Он является точо таким же контролом, как и CommandButton или CheckBox.

Этот контрол позволяет легко просматривать все записи, находящиеся в нашей базе.

Теперь мы зададим "вопрос" нашей базе на SQL и таким образом "скажем" ей, что результаты должны появлятся в FlexGrid.

Нажмите F5, чтобы запустить программу. Наберите в текстовом поле 'Customers' и нажмите кнопку. Вы увидите кучу колонок с разнообразной информацией.

Но теперь давайте представим, что нам нужно показывать не всю таблицу, а только контактные имена. Только вот как это сделать?

Для этого используем SQL. В текстовом поле напишите:

Select ContactName from Customers

что означает примерно следующее: "Покажи мне все, что находится в столбце ContactName из таблицы Customers. Или вот еще один пример:

Select ContactName, ContactTitle from Customers

Только не говорите вашим друзьям, что SQL -- это очень просто. Лучше купите книжку...;)

Кстати, SQL-запросы можно создавать из Access, где они именуются Query.

В этой статье я, как и обещал, познакомил вас с SQL. В следующей статье мы изучим SQL несколько больше.




Автор: Naghual 17.1.2005, 21:27
2 M.E.G.U.S: Ну и что ты этим хотел сказать?

Автор: Gannibal 17.1.2005, 23:51
2 Naghul он ведь хотел знать как в ВБ пользоваться запорасами вот я ему и ответил в принципе понятно всё .. а ты что подумал?

Автор: Flotskiy 18.1.2005, 06:33
Доброе утро всем!
Код

       Option Explicit
Dim adoConnection As ADODB.Connection
Dim adoRecordset As ADODB.Recordset
-----------------------------------------------------
Private Sub Command1_Click()

Set adoConnection = New ADODB.Connection
Set adoRecordset = New ADODB.Recordset

connectString = "Provider=Microsoft.Jet.OLEDB.3.51;" _
                & "Data Source=" & gDataBaseName' -путь, указанный в Global.bas

  Data1.RecordSource = "SELECT Family " & _
                         "FROM Glavnaja WHERE ID=" & ID
                         "ORDER BY  Family"
   Data1.Refresh
' Glavnaja-название таблицы
' Family - поле в таблице
' ID - счетчик этой таблицы
End Sub

На форме Data1, DBGrid1( или MSFlexGrid), кнопка Command1
Так у меня работают уйма приложений , может поможет.
Всего доброго.

Автор: Naghual 18.1.2005, 10:04
Ну а где виновник торжества Vidocq?

Автор: Vidocq 18.1.2005, 10:40
2 Naghual
та я здеся. Просто времени - не особо мно...

2 M.E.G.U.S
Спасибо, но это чуть не то

2 Flotskiy
Спасибо, я попробую так

Добавлено @ 10:47
2 Naghual
ну с ";" - это я погорячился smile

Автор: Vidocq 18.1.2005, 11:00
2 Akina

Цитата

Чудеса, аднака... код - в студию. С указанием места и номера ошибки или неправильной выборки.


Блин, я протупил... smile
код смогу запостить только вечером, так как с работы это нереально.
Прошу у всех прощенья и терпения

Автор: Vidocq 19.1.2005, 10:07
Короче, факамаза раз эдак 35 с половиной а потом ещё, до упора и по самое не балУйся!!!

нет слов и даже букв, одни выражения....

ВБ даже после переустановки категорически отказывается работать с СУБД (аксес 2000, кому интересно - идти на мой топик "траблы с эктивХ" http://forum.vingrad.ru/index.php?showtopic=39043)

запостить код из дому не вышло по причине неоткрывания браузером ИМЕННО ЭТОГО топика.

в общем, по памяти код выглядит примерно так:

Код

Do Until rsAllPoints.EOF = True
     SqlText = "SELECT * FROM TableName WHERE points like" &      rsAllPoints.Fields("Points")
     Set rsIllness = db1.OpenRecordset(SqlText, dbOpenDynaset)
     'и вот то ли здесь


For i = 0 To MyDct.Count - 1
     If MyDct.Keys(i) = rsAllPoints.Fields("Points") Then
     
     '... то ли здесь начинается всякая хня. Код ошибки не помню, но   вроде   бы "нет такого метода"
     OutputBox.Text =rsIllness.Fields("Illness") &vbTab& MyDct.Keys(i) & vbTab & MyDct.Items(i) & vbCrLf & OutputBox.Text
     End If
Next i
rsAllPoints.MoveNext
Loop


Автор: Flotskiy 19.1.2005, 14:56
Добрый вечер всем!
Не верно
Код

SqlText = "SELECT * FROM TableName WHERE points like" &      rsAllPoints.Fields("Points")  

Нужно
Код

SqlText = "SELECT * FROM TableName WHERE points like'*" &      rsAllPoints.Fields("Points") & "*'"
   

С уважением

Автор: krulik 27.4.2006, 18:04
Извините за вопрос. Прочитал все что тут написано но так ничего и не смог реализовать.
По сути мне нужно тоже самое. Из БД выбрать одно значение и записть его в текстовое поле.
Может ли мне ктонибудь толком объяснить как выбрать чтолибо из таблицы! Или хотябы на метериалы где это можно почитать.
Работа естественно с Access

ЗЫ: должен заметить что с VB второй раз в жизни стыкаюсь но очень нужно сделать.  

Автор: Voldemar2004 30.4.2006, 10:32
Цитата(krulik @  27.4.2006,  18:04 Найти цитируемый пост)
Из БД выбрать одно значение и записть его в текстовое поле.
krulik, лучше вместо этого привязать текстовое поле к полю таблицы:

налепи на форму Data1, в свойстве DatabaseName пропиши например: "C:\Visual Studio 6\VB98\BIBLIO.MDB" (или другую БД какая там у тебя). Выбери RecordSource - поле, например "Авторы".
Налепи ТекстБокс - укажи ДатаСорс - Data1, затем ДатаФилд (поле данных) - "Авторы" (или чего ты там хочешь). Все. Если хочешь SQL, то сделай тип РекодрСета динамический (1-Dynaset). В РекордСорс вставляй: Select <поле1, 2, .... , n> from <таблица> where <поле1, 2, .... , n> = <условие>


Цитата(krulik @  27.4.2006,  18:04 Найти цитируемый пост)
Работа естественно с Access
Без разницы с каким типом БД ты работаешь - просто меняешь драйвер/поставщика данных.
 

Автор: LexuSS 17.4.2009, 08:50
Еще вопросик, а если у меня запрос типа UPDATE.
Как надо писать?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)