Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / можно ли без recordset-а / 25 сообщений из 26, страница 1 из 2
27.12.2007, 16:08
    #35038198
rtyts
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно ли без recordset-а
Добрый день еще раз. Вот код
авторDim objConnection
Dim strConnectionString
Dim strSQL
Dim objCommand

Set objConnection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")

strConnectionString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=data_saver;Data Source=mypc\myserver"
objConnection.ConnectionString = strConnectionString
objConnection.Open
strSQL = "select counter_value from energo"
With objCommand
.ActiveConnection = objConnection
.CommandText = strSQL
End With

objCommand.execute
...у меня в табличке energo одно поле counter_value и там число...вот я выполняю запрос и не пойму как мне увидеть запрошенное число просто в текстбоксе...можно ли это сделать без исподьзования recordset-а
...
Рейтинг: 0 / 0
27.12.2007, 16:13
    #35038214
iSestrin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно ли без recordset-а
в адо - нет, насколько я помню, там нет других объектов доступа к данным, кроме рекордсета ... ест ь out параметры, но это еще больший гимор
...
Рейтинг: 0 / 0
27.12.2007, 16:15
    #35038225
Le Peace
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно ли без recordset-а
1.Добавить в комманд параметр типа output.
2.Запрос изменить на
Код: plaintext
select top  1  @par = counter_value from energo
3. После execute посмотреть значение параметра.
4. Вообщето тут форум по MS SQL... :)
...
Рейтинг: 0 / 0
27.12.2007, 16:18
    #35038233
Le Peace
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно ли без recordset-а
Ещё Executescalar есть.
...
Рейтинг: 0 / 0
27.12.2007, 16:19
    #35038244
Le Peace
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно ли без recordset-а
Le Peace4. Вообщето тут форум по MS SQL... :)
Дико извиняюсь каким-то ветром занесло сюда... :(
...
Рейтинг: 0 / 0
27.12.2007, 16:24
    #35038262
rtyts
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно ли без recordset-а
автор3. После execute посмотреть значение параметра.
...а как?
...
Рейтинг: 0 / 0
27.12.2007, 16:44
    #35038340
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно ли без recordset-а
objConnection.Parameters("@par").Value
Но что-то я не уверен, что это сработает.
...
Рейтинг: 0 / 0
28.12.2007, 10:18
    #35039260
big-duke
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно ли без recordset-а
Le PeaceЕщё Executescalar есть.
Это уже vb.net

авторobjConnection.Parameters("@par").Value
У Connection нет такой коллекции.

Можно так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
    Dim objParam As New Parameter
    Dim objcmd As New Command
    
    Set objParam = objcmd.CreateParameter("@count", adInteger, adParamOutput)
    
    Set objcmd.ActiveConnection = myApp.Service.ActiveConnection
    With objcmd
        .CommandText = "SELECT ?= count(*) from SSP_Tables_facts"
        .Parameters.Append objParam
        .Execute
        Debug.Print .Parameters("@count").Value
    End With
Правда меня при этом напрягает лог профиллера
Код: plaintext
1.
2.
3.
4.
declare @P1 int
set @P1= 5439 
exec sp_executesql N'SELECT @P1= count(*) from SSP_Tables_facts', N'@P1 int OUTPUT', @P1 output
select @P1
Получается что уже до запроса, профиллер знает результат. Бред какой то.
...
Рейтинг: 0 / 0
28.12.2007, 11:03
    #35039396
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно ли без recordset-а
У Connection нет такой коллекции.Конечно, я имел в виду Command. Скопипастил не то.
...
Рейтинг: 0 / 0
28.12.2007, 15:48
    #35040429
adv
adv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно ли без recordset-а
Код: plaintext
objConnection.execute("select top 1 counter_value from energo").fields( 0 )
...
Рейтинг: 0 / 0
28.12.2007, 16:40
    #35040599
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно ли без recordset-а
adv , браво, условие фактически выполнено.
...
Рейтинг: 0 / 0
28.12.2007, 16:45
    #35040618
big-duke
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно ли без recordset-а
adv
Код: plaintext
objConnection.execute("select top 1 counter_value from energo").fields( 0 )

Учите матчасть .
...
Рейтинг: 0 / 0
28.12.2007, 16:56
    #35040673
adv
adv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно ли без recordset-а
big-dukeУчите матчасть .стараюсь не прекращать это делать.

А что вас смутило?
...
Рейтинг: 0 / 0
28.12.2007, 17:43
    #35040840
big-duke
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно ли без recordset-а
Я к тому, что у вас неявно используется рекордсет, без которого ТС и хотел обойтись.
...
Рейтинг: 0 / 0
28.12.2007, 17:48
    #35040855
adv
adv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно ли без recordset-а
big-dukeнеявно используется рекордсетя и не говорил, что использоваться не будет.
...
Рейтинг: 0 / 0
28.12.2007, 17:54
    #35040868
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно ли без recordset-а
big-dukeЯ к тому, что у вас неявно используется рекордсет, без которого ТС и хотел обойтись.Ну вообще без рекордсета нельзя ничего вытащить из базы в принципе. Ну исключая базы с прямым доступом конечно :)
Решение adv вполне имеет право на жизнь. Оно конечно тоже делает рекордсет, но неявно.... Хотя время жизни этого рекордсета и соответственно сколько оно будет держать ресурсы сервера это уже вопрос долгий и болезненный. В общем, для микропрограмм так делать можно, а вот для серьезных я бы не советовал....
...
Рейтинг: 0 / 0
28.12.2007, 20:54
    #35041070
big-duke
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно ли без recordset-а
Ну в общем мир, дружба и жвачка :)
...
Рейтинг: 0 / 0
29.12.2007, 13:03
    #35041922
adv
adv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно ли без recordset-а
White Owl... Хотя время жизни этого рекордсета и соответственно сколько оно будет держать ресурсы сервера это уже вопрос долгий и болезненный. В общем, для микропрограмм так делать можно, а вот для серьезных я бы не советовал....Можно про это поподробнее. Или ссылку.

Просто, не брезгую в адп получать так одиночные значения. Может что не то делаю?
Сразу, оговорюсь: системы у меня пока микро - до сотни пользователей. На будущее неплохо бы знать.
...
Рейтинг: 0 / 0
29.12.2007, 15:33
    #35042213
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно ли без recordset-а
Хотя время жизни этого рекордсета и соответственно сколько оно будет держать ресурсы сервера это уже вопрос долгий и болезненный.Нисколько. cn.Execute открывает рекордсет в режиме readonly forwardonly.
...
Рейтинг: 0 / 0
29.12.2007, 23:03
    #35042497
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно ли без recordset-а
adv White Owl... Хотя время жизни этого рекордсета и соответственно сколько оно будет держать ресурсы сервера это уже вопрос долгий и болезненный. В общем, для микропрограмм так делать можно, а вот для серьезных я бы не советовал....Можно про это поподробнее. Или ссылку.

Просто, не брезгую в адп получать так одиночные значения. Может что не то делаю?
Сразу, оговорюсь: системы у меня пока микро - до сотни пользователей. На будущее неплохо бы знать.В данном случае это уже не микро, а макро... Микро это когда один пользователь. Два пользователя это уже много :)

Когда ты делаешь запрос к серверу, сервер не просто формирует резалтсет и отдает его весь разом клиенту, а держит этот резалтсет в своей памяти и отдает его клиенту по одной строке за раз (по командам fetch или movenext). Когда клиент ГОВОРИТ серверу что мол "я закончил работать с резалтсетом" тогда сервер забывает этот резалтсет и отдает эту память под резалтсеты другого клиента...
Чтобы клиент сказал серверу "я закончил" надо сделать что-то типа rs.Close(). В принципе рекордсеты автоматически закрываются если переменной-рекордсет присваивается nothing или она выходит за пределы видимости. Но в случае с неявным определением рекордсета ты не знаешь точно какие у этого неявного рекордсета пределы видимости - в принципе они должны быть в пределах одной команды (которая его создала), но к сожалению это не совсем так. По окончанию команды рекордсет становится недоступным программе, но реально убьется только по выходу из текущего блока видимости. Или когда до него доберется сборщик мусора (в vb.net), а до тех пор он может держать один лишний резалтсет-буфер на сервере.
...
Рейтинг: 0 / 0
30.12.2007, 08:52
    #35042588
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно ли без recordset-а
Когда ты делаешь запрос к серверу, сервер не просто формирует резалтсет и отдает его весь разом клиенту, а держит этот резалтсет в своей памяти и отдает его клиенту по одной строке за раз.Это завитит от местоположения, типа курсора и типа блокировки. adUseClient + adOpenStatic получает все все данные сразу, сервер в памяти ничего не держит.
...
Рейтинг: 0 / 0
30.12.2007, 17:11
    #35042706
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно ли без recordset-а
Antonariy Когда ты делаешь запрос к серверу, сервер не просто формирует резалтсет и отдает его весь разом клиенту, а держит этот резалтсет в своей памяти и отдает его клиенту по одной строке за раз.Это завитит от местоположения, типа курсора и типа блокировки. adUseClient + adOpenStatic получает все все данные сразу, сервер в памяти ничего не держит.yep... but do you know what kind of cursor would be opened by the command
objConnection.execute("select top 1 counter_value from energo").fields(0)
Can you show me any documentation to prove your knowledge?
...
Рейтинг: 0 / 0
31.12.2007, 12:27
    #35042901
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно ли без recordset-а
White Owl
Посмотри в MSDN параметры по умолчанию у rs.Open. Это оно и есть.
...
Рейтинг: 0 / 0
31.12.2007, 17:28
    #35043025
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно ли без recordset-а
Antonariy White Owl
Посмотри в MSDN параметры по умолчанию у rs.Open. Это оно и есть.А ну да.... Открываем, смотрим... В секции Remarks первая же строка:
The default cursor for an ADO Recordset is a forward-only, read-only cursor located on the server.
Что подтверждает тезис об опасности использования неявных рекордсетов.
...
Рейтинг: 0 / 0
01.01.2008, 09:52
    #35043122
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
можно ли без recordset-а
Однако если у соединения курсор клиентский, то и у рекордсета будет такой же.
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / можно ли без recordset-а / 25 сообщений из 26, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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