Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Можно ли использовать такой код? SQL VB6 (внутри) / 7 сообщений из 7, страница 1 из 1
01.03.2004, 19:32
    #32427025
Pantalone
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли использовать такой код? SQL VB6 (внутри)
Только начинаю писать на 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
01.03.2004, 20:16
    #32427055
Magnus23
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли использовать такой код? SQL VB6 (внутри)
В принципе то все верно только подобные вещи нужноделать не из VB кода а переносить в хранимую процедуру на сервере и вызывать ее. И вернее и быстрее.
Да и 2 рекордсета ни к чему.

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

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

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

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

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

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

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



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


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