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

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

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

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

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

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

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

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

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

очень полезно кстати
...
Рейтинг: 0 / 0
Использование курсоров в ADO (aduka05adm)
    #36704482
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
а алгоритм какой? как работать с данными которые потихоньку загружаются?
ведь мы делаем запрос "Select * from table" разве не придется ждать пока все данные загрузятся?
...
Рейтинг: 0 / 0
Использование курсоров в ADO (aduka05adm)
    #36704483
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aduka05admShocker.Pro,
а алгоритм какой? как работать с данными которые потихоньку загружаются?
ведь мы делаем запрос "Select * from table" разве не придется ждать пока все данные загрузятся?
Нет. Догрузка данных происходит асинхронно в другом потоке, а в VB метод Open уже отработал и уже можно делать выборку. То есть ты просто не замечаешь этой догрузки. Если вдруг ты с помощью MoveNext уперся в последнюю подгруженную запись, MoveNext дождется поступления следующей записи и только потом вернет управление в VB и так вплоть до EOF
...
Рейтинг: 0 / 0
Использование курсоров в ADO (aduka05adm)
    #36704489
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот тебе типичное использование а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
Использование курсоров в ADO (aduka05adm)
    #36704500
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProНет. Догрузка данных происходит асинхронно в другом потоке,Вообще-то, как раз синхронно.Shocker.ProТо есть ты просто не замечаешь этой догрузки.В асинхронном режиме, он ее очень даже хорошо заметит :)

И вообще, синхронность и асинхронность работы это вопрос намного более сложный и долгий. Не стоит его примешивать к учебнику по курсорам.
...
Рейтинг: 0 / 0
Использование курсоров в ADO (aduka05adm)
    #36704512
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlShocker.ProНет. Догрузка данных происходит асинхронно в другом потоке,Вообще-то, как раз синхронно.
О, черт.
Опять придется флеймить с доказательствами того, что Open возвращает управление до окончания фактической передачи данных?
...
Рейтинг: 0 / 0
Использование курсоров в ADO (aduka05adm)
    #36704513
Фотография 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
Использование курсоров в ADO (aduka05adm)
    #36704518
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aduka05admrs(i) это целиком запись?
это i-тое поле
aduka05admи какой смысл использовать два раза эту конструкцию?
в первый раз выводятся заголовки
...
Рейтинг: 0 / 0
Использование курсоров в ADO (aduka05adm)
    #36704532
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
то есть во второй раз выводится все поле?
...
Рейтинг: 0 / 0
Использование курсоров в ADO (aduka05adm)
    #36704536
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aduka05admShocker.Pro,
то есть во второй раз выводится все поле?
Ну, честно говоря, не очень понял вопроса
Код: plaintext
rs(i).Value
так правильнее и понятнее
...
Рейтинг: 0 / 0
Использование курсоров в ADO (aduka05adm)
    #36704559
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
понял , во внутреннем цикле проходим все поля и записываем , переходим к следующей записи и тоже самое
Код: plaintext
trim(""&rs(i))
здесь убираем пробелы и в тот же момент устанавливаем пробел?
Код: plaintext
instr(field_data, ",")
если нашли запятую устанавливаем кавычки верно?
...
Рейтинг: 0 / 0
Использование курсоров в ADO (aduka05adm)
    #36704586
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aduka05admShocker.Pro,
понял , во внутреннем цикле проходим все поля и записываем , переходим к следующей записи и тоже самое
Код: plaintext
trim(""&rs(i))
здесь убираем пробелы и в тот же момент устанавливаем пробел?
честно говоря, я не понял, зачем здесь дополнение пустой строкой, может такой необычный способ преобразования типа в строку. Trim-ом просто режем начальные и конечные пробелы
aduka05adm
Код: plaintext
instr(field_data, ",")
если нашли запятую устанавливаем кавычки верно?
Берем все поле в кавычки. Этот код формирует csv-файл, и в кавычки приходится братьте значения, которые содержат разделитель (запятую в данном случае)
...
Рейтинг: 0 / 0
Использование курсоров в ADO (aduka05adm)
    #36704623
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
долго думал но понял спасибо)))
читал ваш топик у вас программа в 100 и более форм ,сколько же времени вы ее писали?и еще вопрос если пользователь в gride меняет значение то лучше использовать MSFLEXGRID(имею ввиду где нет прямого доступа к базе) или Grid с поддержкой этого по типу DataGrid (заметил ошибки при прямом внесении данных)?
...
Рейтинг: 0 / 0
Использование курсоров в ADO (aduka05adm)
    #36704655
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aduka05admдолго думал но понял спасибо)))
читал ваш топик у вас программа в 100 и более форм ,сколько же времени вы ее писали?
стало быть мало ты моих топиков читал
/topic/703320&pg=2#7864533

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

Почему несерьезно???
Ты начни, а там увидишь
...
Рейтинг: 0 / 0
Использование курсоров в ADO (aduka05adm)
    #36705217
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь ГорбоносПочему несерьезно???
Ты начни, а там увидишь привыкнешь
...
Рейтинг: 0 / 0
Использование курсоров в ADO (aduka05adm)
    #36705560
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,
договорились
...
Рейтинг: 0 / 0
Использование курсоров в ADO (aduka05adm)
    #36706736
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
25 сообщений из 39, страница 1 из 2
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Использование курсоров в ADO (aduka05adm)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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