Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Параметризованные запросы к БД - есть ли и как? / 13 сообщений из 13, страница 1 из 1
03.11.2004, 11:49:35
    #32766327
ponomarevvb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параметризованные запросы к БД - есть ли и как?
Добрый день всем.
У меня такой вопрос: есть ли в VB параметризованные запросы?
Что имеется в виду. В Яве, например, можно сделать так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
	String url = "jdbc:odbc:DataSource";
	Connection conn = DriverManager.getConnection(url, "scott", "tiger");
	String sql = "select * from a where id = ?";
	PreparedStatement pstmt = conn.prepareStatement(sql);
	pstmt.setInt( 1 ,  5 ) // Устанавливаем id = 5
	ResultSet result = pstmt.executeQuery();
	/* Чего-то делаем с результатами
	 * ...
	 */
	pstmt.setInt( 1 ,  100 ) // Устанавливаем id = 100
	ResultSet result = pstmt.executeQuery();
	// ...
	conn.close();
При том запрос парсится СУБД только один раз, и при очередном выполнении запроса переподключения не происходит.
Можно ли такое сделать в VB? Если нет, то можно ли (и как), не закрывая соединения (используется ADODB.Connection), выполнить в его рамках другой запрос?
Заранее спасибо.
...
Рейтинг: 0 / 0
03.11.2004, 12:07:38
    #32766377
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параметризованные запросы к БД - есть ли и как?
Используя Data Environment:
Создаем Command1
Конструируем запрос, где надо ставим параметр (? - в столбик Criteria)
В коде: Call DataEnvironment1.Command1(Список занчений параметров)
Пользуемся рекордсетом rsCommand1
то-же - для другой Command

Если надо использовать rsCommand1 после разрыва подключения, назначить ему LockType = adBatchOptimistic

Можно все в коде. но труднее.
...
Рейтинг: 0 / 0
03.11.2004, 12:10:25
    #32766383
marvan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параметризованные запросы к БД - есть ли и как?
Рекомендую посмотреть свойсво Prepared объекта ADODB.Command
Файл справки - ADO210.CHM
...
Рейтинг: 0 / 0
03.11.2004, 12:14:22
    #32766395
ponomarevvb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параметризованные запросы к БД - есть ли и как?
2 Worobjoff:
А можно небольшой примерчик или ссылочку?
...
Рейтинг: 0 / 0
03.11.2004, 13:04:17
    #32766541
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параметризованные запросы к БД - есть ли и как?
Пример можно создать самому:

1. Создаем новый проект в VB6 (тип - "DataProject")
2. Находим DataEnvironment (для простоты лучше сразу переименовать его в DE1)
3. Открываем свойства Connection1 и настраиваем подключение (SQL-Server, “Northwind”)
4. Создаем объект Command (ищем там конструктор запроса). Или просто в SQL Statement кидаем
SELECT CustomerID, CompanyName FROM Customers WHERE (CompanyName LIKE ?)
5. В форме frmDataEnv создаем кнопку.
6. Обработчик кнопки:

Private Sub Command1_Click()
Dim s As String
If DE1.Connection1.State = adStateClosed Then DE1.Connection1.Open
Call DE1.Command1("A%")
s = ""
Do Until DE1.rsCommand1.EOF
s = s & DE1.rsCommand1.Fields(1) & "" & vbCrLf
DE1.rsCommand1.MoveNext
Loop
MsgBox s
If DE1.rsCommand1.State = adStateOpen Then DE1.rsCommand1.Close
Call DE1.Command1("B%")
s = ""
Do Until DE1.rsCommand1.EOF
s = s & DE1.rsCommand1.Fields(1) & "" & vbCrLf
DE1.rsCommand1.MoveNext
Loop
MsgBox s
If DE1.Connection1.State = adStateOpen Then DE1.Connection1.Close
End Sub

Запускаем, убеждаемся, что работает
...
Рейтинг: 0 / 0
03.11.2004, 20:06:58
    #32767587
ponomarevvb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параметризованные запросы к БД - есть ли и как?
2 Worobjoff:
Что-то не могу найти DataEnvironment...
У меня VBA, если быть точным, а не VB. Это что-то меняет?
...
Рейтинг: 0 / 0
03.11.2004, 21:23:37
    #32767629
Magnus23
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параметризованные запросы к БД - есть ли и как?
Я бы рекомендовал DE не использовать. Глючная и противная штука чреватая проблемами.

Magnus
...
Рейтинг: 0 / 0
03.11.2004, 23:41:30
    #32767672
ponomarevvb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параметризованные запросы к БД - есть ли и как?
2 Magnus23:
А как без DE?
...
Рейтинг: 0 / 0
04.11.2004, 01:20:50
    #32767712
Magnus23
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параметризованные запросы к БД - есть ли и как?
Что есть ДЕ? Некий дизайнер содержащий коллекции рекордсетов, команд и соеденений. С пулом соеденений у него отдельная история. Очень нехорошая.
Но сейчас не об этом. Все те же команды и рекордсеты лучше создавать руками имея при этом больше контроля над происходящим.

Сделать можно разными способами. Можно создать команду, в ней параметр и просто изменяя его значение выпонять команду по новой. А можно и
(сори у меня глюки, английский напрочь отвалился)
Рекордсет.Опен (селект *....)

Закрывать соеденение, собственно, никто не заставляет. Можно отсоеденить от него рекордсет если есть в том необходимость, а потом подсоеденить заново.

Magnus
...
Рейтинг: 0 / 0
04.11.2004, 08:43:17
    #32767843
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параметризованные запросы к БД - есть ли и как?
Private Sub Form_Load()
conn.Open "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=Northwind;Data Source=SERVER0" 'SERVER0 - имя MS SQL Server
cm.CommandText = "SELECT CustomerID, CompanyName FROM Customers WHERE (CompanyName LIKE ?)"
cm.ActiveConnection = conn
End Sub

Private Sub Command1_Click()
Dim s As String
If conn.State = adStateClosed Then conn.Open
Set rs = cm.Execute(, "A%")
s = ""
Do Until rs.EOF
s = s & rs.Fields(1) & "" & vbCrLf
rs.MoveNext
Loop
MsgBox s
If rs.State = adStateOpen Then rs.Close
Set rs = cm.Execute(, "B%")
s = ""
Do Until rs.EOF
s = s & rs.Fields(1) & "" & vbCrLf
rs.MoveNext
Loop
MsgBox s
End Sub

Magnus23Я бы рекомендовал DE не использовать. Глючная и противная штука чреватая проблемами.
Что за проблемы?
Кроме как при создании инсталляции проблем не встречал. А вот чтобы изучить ADO - отличная штука.
Ну а о том, чтобы в коде... да, сам часто создаю rs в коде, но тогда, когда SQL очень простой или на оборот слишком сложный.
...
Рейтинг: 0 / 0
04.11.2004, 10:07:13
    #32768000
marvan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параметризованные запросы к БД - есть ли и как?
Относительно DataEnvironment
- никогда его не использовал, ибо какой от него толк?
Также не пользуюсь Data контролом
Пользуюсь только Microsoft ActiveX Data Objects 2.x Library
Причина здесь проста - "Зачем нам кузнец? нам кузнец не нужен" Зачем использовать дополнительные обёртки к ADO если можно работать непосредственно с ADO? При этом работаю с большими и малыми БД, и горя не знаю.

Возможно единственное применение DataEnvironment и Data-контрола - программирование мышкой в 8-м классе на уроке информатики.
...
Рейтинг: 0 / 0
04.11.2004, 12:34:16
    #32768480
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параметризованные запросы к БД - есть ли и как?
marvan, а какой-нибудь броузер БД (или навигатор) используешь, или все помнишь?
А если да, то наверно там есть и построитель запросов, и анализатор, etc.?
Для начинающих (и не только 8й) пойдет и DE.
Data контрол... согласен, кроме как навигатора по записям ни для чего больше не годтся. Да и навигатр сегодня выглядит архаично. лучше вместо него - табличка.
...
Рейтинг: 0 / 0
04.11.2004, 19:38:00
    #32769581
ponomarevvb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параметризованные запросы к БД - есть ли и как?
Всем большое спасибо.
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Параметризованные запросы к БД - есть ли и как? / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]