Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Использование курсоров в ADO (aduka05adm) / 25 сообщений из 39, страница 1 из 2
23.06.2010, 21:35
    #36704408
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование курсоров в ADO (aduka05adm)
aduka05admShocker.Pro,
вопрос про курсоры можно?

Код: plaintext
1.
2.
3.
4.
5.
6.
аdOpenDynamic - это самый удачный курсор для многопользовательской среды, сразу видны изменения вносимые другими пользователями.

аdOpenKeyset - все то же самое, что и для динамического за исключением того, что доступ к записям добавленным или удаленным другими пользователями запрещен.

аdOpenStatic - набор на момент генерации запроса.

аdOpenForwardOnly - набор записей с последовательным доступом. Доступен только один метод MoveNext.

аdOpenForwardOnly по умолчанию используется он если не указать явно ,
теперь вопрос , насколько я понял в grid-e можно будет двигаться тоже только вперед , допустим добавляя значение вручную?
...
Рейтинг: 0 / 0
23.06.2010, 21:44
    #36704421
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование курсоров в ADO (aduka05adm)
aduka05adm аdOpenForwardOnly по умолчанию используется он если не указать явно ,
теперь вопрос , насколько я понял в grid-e можно будет двигаться тоже только вперед , допустим добавляя значение вручную?

У меня такое впечатление, что сетка просто не захочет работать с таким курсором, попробуй.

Вообще этот тип курсора при серверном использовании нужен и весьма полезен, когда требуется скорость работы. Его особенность в том, что данные начинают поступать в твое распоряжение ДО ТОГО, как они полностью будут переданы с сервера. То есть работать с рекордсетом (например заполнять массив, анализировать или заполнять какой-то пользовательский интерфейс) можно начать сразу, как только поступила первая запись, а пока ты обрабатываешь данные, они постепенно подтягиваются с сервера. Это, кстати, хорошо заметно при работе через интернет.

Побочным явлением является RecordsCount=-1
...
Рейтинг: 0 / 0
23.06.2010, 22:11
    #36704463
aduka05adm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование курсоров в ADO (aduka05adm)
Shocker.Pro,
спасибо
Shocker.ProТо есть работать с рекордсетом (например заполнять массив, анализировать или заполнять какой-то пользовательский интерфейс) можно начать сразу, как только поступила первая запись, а пока ты обрабатываешь данные, они постепенно подтягиваются с сервера. Это, кстати, хорошо заметно при работе через интернет.

очень полезно кстати
...
Рейтинг: 0 / 0
23.06.2010, 22:20
    #36704482
aduka05adm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование курсоров в ADO (aduka05adm)
Shocker.Pro,
а алгоритм какой? как работать с данными которые потихоньку загружаются?
ведь мы делаем запрос "Select * from table" разве не придется ждать пока все данные загрузятся?
...
Рейтинг: 0 / 0
23.06.2010, 22:25
    #36704483
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование курсоров в ADO (aduka05adm)
aduka05admShocker.Pro,
а алгоритм какой? как работать с данными которые потихоньку загружаются?
ведь мы делаем запрос "Select * from table" разве не придется ждать пока все данные загрузятся?
Нет. Догрузка данных происходит асинхронно в другом потоке, а в VB метод Open уже отработал и уже можно делать выборку. То есть ты просто не замечаешь этой догрузки. Если вдруг ты с помощью MoveNext уперся в последнюю подгруженную запись, MoveNext дождется поступления следующей записи и только потом вернет управление в VB и так вплоть до EOF
...
Рейтинг: 0 / 0
23.06.2010, 22:27
    #36704489
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование курсоров в ADO (aduka05adm)
Вот тебе типичное использование аdOpenForwardOnly курсора.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
dim conn, rs, i, fso, fout, field_data
set fso = CreateObject("Scripting.FileSystemObject")
set fout = fso.CreateTextFile(Output_File_Name, True)
set conn = CreateObject("ADODB.Connection")
conn.Open Connection_String
set rs = conn.Execute(SQL_Statement)


for i= 0  to rs.Fields.Count- 1 
	if i> 0  then fout.Write ","
	fout.Write rs.Fields(i).Name
next
fout.WriteLine

do while not rs.eof
	for i= 0  to rs.Fields.Count- 1 
		if i> 0  then fout.Write ","
		field_data = trim(""&rs(i))
		if instr(field_data, ",") then field_data = """" & field_data & """"
		fout.Write field_data
	next
	fout.WriteLine
	rs.MoveNext
loop

rs.Close
conn.Close
fout.Close
...
Рейтинг: 0 / 0
23.06.2010, 22:31
    #36704500
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование курсоров в ADO (aduka05adm)
Shocker.ProНет. Догрузка данных происходит асинхронно в другом потоке,Вообще-то, как раз синхронно.Shocker.ProТо есть ты просто не замечаешь этой догрузки.В асинхронном режиме, он ее очень даже хорошо заметит :)

И вообще, синхронность и асинхронность работы это вопрос намного более сложный и долгий. Не стоит его примешивать к учебнику по курсорам.
...
Рейтинг: 0 / 0
23.06.2010, 22:36
    #36704512
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование курсоров в ADO (aduka05adm)
White OwlShocker.ProНет. Догрузка данных происходит асинхронно в другом потоке,Вообще-то, как раз синхронно.
О, черт.
Опять придется флеймить с доказательствами того, что Open возвращает управление до окончания фактической передачи данных?
...
Рейтинг: 0 / 0
23.06.2010, 22:36
    #36704513
aduka05adm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование курсоров в ADO (aduka05adm)
White Owl,
Код: plaintext
field_data = trim(""&rs(i))
rs(i) это целиком запись?
и какой смысл использовать два раза эту конструкцию?
Код: plaintext
1.
for i= 0  to rs.Fields.Count- 1 
		if i> 0  then fout.Write ","
...
Рейтинг: 0 / 0
23.06.2010, 22:37
    #36704518
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование курсоров в ADO (aduka05adm)
aduka05admrs(i) это целиком запись?
это i-тое поле
aduka05admи какой смысл использовать два раза эту конструкцию?
в первый раз выводятся заголовки
...
Рейтинг: 0 / 0
23.06.2010, 22:46
    #36704532
aduka05adm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование курсоров в ADO (aduka05adm)
Shocker.Pro,
то есть во второй раз выводится все поле?
...
Рейтинг: 0 / 0
23.06.2010, 22:51
    #36704536
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование курсоров в ADO (aduka05adm)
aduka05admShocker.Pro,
то есть во второй раз выводится все поле?
Ну, честно говоря, не очень понял вопроса
Код: plaintext
rs(i).Value
так правильнее и понятнее
...
Рейтинг: 0 / 0
23.06.2010, 22:58
    #36704559
aduka05adm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование курсоров в ADO (aduka05adm)
Shocker.Pro,
понял , во внутреннем цикле проходим все поля и записываем , переходим к следующей записи и тоже самое
Код: plaintext
trim(""&rs(i))
здесь убираем пробелы и в тот же момент устанавливаем пробел?
Код: plaintext
instr(field_data, ",")
если нашли запятую устанавливаем кавычки верно?
...
Рейтинг: 0 / 0
23.06.2010, 23:08
    #36704586
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование курсоров в ADO (aduka05adm)
aduka05admShocker.Pro,
понял , во внутреннем цикле проходим все поля и записываем , переходим к следующей записи и тоже самое
Код: plaintext
trim(""&rs(i))
здесь убираем пробелы и в тот же момент устанавливаем пробел?
честно говоря, я не понял, зачем здесь дополнение пустой строкой, может такой необычный способ преобразования типа в строку. Trim-ом просто режем начальные и конечные пробелы
aduka05adm
Код: plaintext
instr(field_data, ",")
если нашли запятую устанавливаем кавычки верно?
Берем все поле в кавычки. Этот код формирует csv-файл, и в кавычки приходится братьте значения, которые содержат разделитель (запятую в данном случае)
...
Рейтинг: 0 / 0
23.06.2010, 23:30
    #36704623
aduka05adm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование курсоров в ADO (aduka05adm)
Shocker.Pro,
долго думал но понял спасибо)))
читал ваш топик у вас программа в 100 и более форм ,сколько же времени вы ее писали?и еще вопрос если пользователь в gride меняет значение то лучше использовать MSFLEXGRID(имею ввиду где нет прямого доступа к базе) или Grid с поддержкой этого по типу DataGrid (заметил ошибки при прямом внесении данных)?
...
Рейтинг: 0 / 0
23.06.2010, 23:52
    #36704655
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование курсоров в ADO (aduka05adm)
aduka05admдолго думал но понял спасибо)))
читал ваш топик у вас программа в 100 и более форм ,сколько же времени вы ее писали?
стало быть мало ты моих топиков читал
/topic/703320&pg=2#7864533

aduka05admи еще вопрос если пользователь в gride меняет значение то лучше использовать MSFLEXGRID(имею ввиду где нет прямого доступа к базе) или Grid с поддержкой этого по типу DataGrid (заметил ошибки при прямом внесении данных)?
Ну это кому как удобнее и какая цель ставится.
К примеру, для ввода даты в своих приложениях я использую собственный контрол. Он имеет собственно поле для написания даты ручками, UpDown для листания даты вперед-назад мышкой (как у цифровых полей), вызов календарика на три месяца вокруг текущей даты, выбор из списка типа "вчера, послезавтра, плюс месяц, минус год и т.п.), поддержку дружественной даты ("вчера", "сегодня", "завтра"), разный цвет для текущей, прошлых и будущих дат. Естественно, я хочу и в грид вводить дату с помощью своего контрола, а не с помощью того, который предложит мне DataGrid
...
Рейтинг: 0 / 0
24.06.2010, 00:15
    #36704673
aduka05adm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование курсоров в ADO (aduka05adm)
Shocker.Pro,
больше десяти лет ошолеть )))
это все время вы ее обслуживаете?
не легче было купить что то типо 1с предприятие для организации?
...
Рейтинг: 0 / 0
24.06.2010, 00:36
    #36704681
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование курсоров в ADO (aduka05adm)
aduka05admShocker.Pro,
больше десяти лет ошолеть )))
это все время вы ее обслуживаете?
не легче было купить что то типо 1с предприятие для организации?
Нет, я ж не бухгалтерию пишу :)
Точнее бухгалтерия там есть только в виде первички (но это процентов 10 программы) - бухгалтерские данные потом экспортируются в 1С и обрабатываются уже там.
...
Рейтинг: 0 / 0
24.06.2010, 00:42
    #36704682
aduka05adm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование курсоров в ADO (aduka05adm)
Shocker.Pro,
в 1996 скорее всего и не было , но щас по мойму там помимо бухгалтерии есть учет всего ,
от магазина до гостиниц.
я читал вы самоучка , типо не учились на программиста, я вот сам учу и насколько понимаю если рядом нет того кто будет многое объяснять то это процесс очень долгий, верно?
...
Рейтинг: 0 / 0
24.06.2010, 00:53
    #36704689
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование курсоров в ADO (aduka05adm)
aduka05admв 1996 скорее всего и не было , но щас по мойму там помимо бухгалтерии есть учет всего ,от магазина до гостиниц.
Ну опять же, я не говорил, что пишу учет :)
aduka05admя читал вы самоучка , типо не учились на программиста, я вот сам учу и насколько понимаю если рядом нет того кто будет многое объяснять то это процесс очень долгий, верно?
Надо просто писать, писать, писать, тогда будет быстро.
И писать не тестовые задачи, а реальные приложения, да еще и самому ими пользоваться.
Придумай себе: собственный фотоальбом, собственный обработчик телепрограммы, собственную записную книжку, в конце-концов, собственную качалку порнухи. И реализуй то, что ты хочешь сделать, а не то, на какаие возможности языка наткнулся.
...
Рейтинг: 0 / 0
24.06.2010, 01:09
    #36704696
aduka05adm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование курсоров в ADO (aduka05adm)
Shocker.Pro,
Shocker.Proсобственную качалку порнухи
не серьезно)
а так спасибо за советы,очень дельные
...
Рейтинг: 0 / 0
24.06.2010, 09:12
    #36704902
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование курсоров в ADO (aduka05adm)
aduka05admShocker.Pro,
Shocker.Proсобственную качалку
не серьезно)

Почему несерьезно???
Ты начни, а там увидишь
...
Рейтинг: 0 / 0
24.06.2010, 11:09
    #36705217
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование курсоров в ADO (aduka05adm)
Игорь ГорбоносПочему несерьезно???
Ты начни, а там увидишь привыкнешь
...
Рейтинг: 0 / 0
24.06.2010, 12:38
    #36705560
aduka05adm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование курсоров в ADO (aduka05adm)
Antonariy,
договорились
...
Рейтинг: 0 / 0
24.06.2010, 18:33
    #36706736
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование курсоров в ADO (aduka05adm)
Shocker.ProWhite OwlShocker.ProНет. Догрузка данных происходит асинхронно в другом потоке,Вообще-то, как раз синхронно.
О, черт.
Опять придется флеймить с доказательствами того, что Open возвращает управление до окончания фактической передачи данных?Наверное.... Уж коли внимательность подводит, то придется флеймить.
Open в синхронном режиме возвращает управление когда сервер выдаст хоть что-нибудь. В случае успешной обработки запроса это будет первая строкя первого резалтсета. После этого, подготовленные данные первого резалтсета сидят в буфере на сервере и по каждому MoveNext сервер отдает очередную строку. Сервер в это время, ничего кроме отдачи строк из подготовленного резалстета не делает. Обработку запросов от других коннектов мы сейчас не рассматриваем. Когда клиент даст команду NextRecordset сервер проснется и продолжит выполнение командного пакета подготавливая следующий резалтсет. Клиент в это время будет сидеть и ждать. Как только сервер подготовит следующий резалтсет, он отпустит клиента из режима ожидания и тот снова начнет выбирать строки через MoveNext.

А в асинхронном режиме все несколько по другому. Послав Open клиент сразу же продолжает работать. Клиент не будет ждать пока сервер разберется с таблицами, индексами и связями. Но это так же означает, что клиент не сможет сделать успешный вызов MoveNext, потому что сервер еще не подготовил резалтсет. И клиент, прежде чем начнет получать данные, должен будет сидеть в цикле типа:
Код: plaintext
1.
2.
3.
while rs.State = adStateExecuting
   doevents
wend
И только когда State станет равным adStateOpen ты сможешь сделать успешный MoveNext.
Причем MoveNext тоже будет возвращаться сразу же, не дожидаясь пока данные реально пройдут по сети и лягут в клиентский объект. В это время State будет равным adStateFetching.


Синхронность и асинхронность в применении к ADO (и вообще ко всем интерфейсам баз данных) означает что команды общения с сервером либо будут, либо не будут ждать ответа от сервера прежде чем передать управление следующей строке программы.
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Использование курсоров в ADO (aduka05adm) / 25 сообщений из 39, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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