powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Можно ли использовать такой код? SQL VB6 (внутри)
7 сообщений из 7, страница 1 из 1
Можно ли использовать такой код? SQL VB6 (внутри)
    #32427025
Pantalone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Только начинаю писать на VB под базу SQL.
Почитал литературу, как оказалось нет однозначных алгоритмов оперирования данными, одно и то же можно делать разными способами, это и вводит в заблуждение.
Вот например код, нужно удалить таблицу если она есть, создать ее заново и заполнить и отобразить в гриде:
----------------------------------------
Dim strSQL As String
Set RS = New ADODB.Recordset
Public cnn As New ADODB.Connection

strSQL = "if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[temp]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) " _
& "drop table [dbo].[temp] " _
& "CREATE TABLE [dbo].[temp] ( " _
& "[id] [int] IDENTITY (1, 1) NOT NULL , " _
& "[Id_Cnt] [int] NOT NULL , " _
& "[Product] [varchar] (255) COLLATE Cyrillic_General_CI_AS NULL , " _
& ") ON [PRIMARY] " _
& "insert into [temp] (Id_Cnt,Product) values(1,'Òîâàð À')"


With RS
.ActiveConnection = cnn
.CursorLocation = adUseClient
.CursorType = adOpenKeyset
.LockType = adLockOptimistic
.Source = strSQL
.Open
End With


strSQL = "SELECT Id_Counter, Product FROM temp"

With RS
.ActiveConnection = cnn
.CursorLocation = adUseClient
.CursorType = adOpenKeyset
.LockType = adLockOptimistic
.Source = strSQL
.Open
End With


Set gridTemp.DataSource = RS
----------------------------------------
Код выполняется, но я не уверен что это правильный вариант, подскажите.
...
Рейтинг: 0 / 0
Можно ли использовать такой код? SQL VB6 (внутри)
    #32427055
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В принципе то все верно только подобные вещи нужноделать не из VB кода а переносить в хранимую процедуру на сервере и вызывать ее. И вернее и быстрее.
Да и 2 рекордсета ни к чему.

Magnus
...
Рейтинг: 0 / 0
Можно ли использовать такой код? SQL VB6 (внутри)
    #32427239
Pantalone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Работать-то работает, но мало ли, может до тех пор пока память не загадится или чего там еще.
Ведь кое что можно было реализовать через Connection, а можно было задействовать и Command и это не спроста придумано, а я все на рекордсетах забабахал. Насколько это можно назвать "правильным" кодом? Замусоривается ли так память больше или наоборот меньше и вообще как принято писать в общих чертах, можно с примером.
Где тут 2 рекордсета? Вроде он тут один.
...
Рейтинг: 0 / 0
Можно ли использовать такой код? SQL VB6 (внутри)
    #32427468
Фотография SergeySV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Один - это номинально, а по существу у тебя их два.
Назначение первого мало понятно. Если тебе надо создать TEMP таблицу, то используй Command - зачем для этого Recodset для меня загадка.
...
Рейтинг: 0 / 0
Можно ли использовать такой код? SQL VB6 (внутри)
    #32427720
Pantalone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне зачем? Просто попробовал и сработало! Вопрос в том зачем разбаотчики это сделали возможным? Почему нельзя было сделать работу с рекордсетами отдельно, с хранимыми процедурами отдельно, с конекшенами отдельно и однозначно, к чему весь этот бардак?
...
Рейтинг: 0 / 0
Можно ли использовать такой код? SQL VB6 (внутри)
    #32427895
Фотография SergeySV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет никакого бардака, то как ты умудрился сделать мало кому придет в голову.

Recodset - для дин. хранения результата выборки/вычислений над таблицами
Command - для выполения исполняемых запросов типа INSERT/DELETE/UPDATE, вообщем когда не нужно возвращать никаких полей.

И Recodset и Command используют объект Connection - он находится на верхнем уровне иерархии ADO и для доступа к любым объектам ADO сначала необходимо создать объект Connection (он создается явно или неявно, но всегда присутствует). Объект Connection нужен для установки подключения, параметры которго потом используют объекты: Recodset, Command.

ADO вообще разрабатывалась как новая универсальная библиотека доступа к базам данных. В отличии от DAO, которая является бибиотекой исключительной Access'вской (вот в ней как раз уже приличный бардак уже накопился за все эти годы), ADO можно применять для доступа к ЛЮБОЙ базе данных, которая предоставили поддержку в своей базе этому стандарту(за этим долго не станет).

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

P.S. кстати, хранимые процедуру относятся к внутренним объектам базы данных и для доступа к ним вместе с такими объектами как таблицы, группы и пользователи (еще и Views) необходимо использовать другую библиотеку - ADOX - которая как раз предназначена для манипулирования структурой базы данных.
...
Рейтинг: 0 / 0
Можно ли использовать такой код? SQL VB6 (внутри)
    #32427898
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос в том зачем разбаотчики это сделали возможным? Почему нельзя было сделать работу с рекордсетами отдельно, с хранимыми процедурами отдельно, с конекшенами отдельно и однозначно, к чему весь этот бардак?

Разработчики просто дали тебе различные возможности. Рекордсет служит для получения данных по твоему запросу. Сам запрос для него - текст, не более, он передается на сервер и там обрабатывается. На клиентской стороне нет возможности узнать вернет ли товй запрос результат или это просто создание таблицы. Разве что одним из параметров рекордсета ты укажешь тип запроса(хранимка, текст, команда), это кстати тоже рекомендуется для ускорения работы.
Если заранее знаешь что процедура не возвращает результаты, вызывай ее через соеденение.



Magnus
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Можно ли использовать такой код? SQL VB6 (внутри)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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