powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как добавить запись в ADO
22 сообщений из 22, страница 1 из 1
Как добавить запись в ADO
    #35674476
ННовичок
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ocon = CREATEOBJECT('ADODB.Connection')
ocon.connectionstring = ;
[Provider=SQLOLEDB.1;] + ;
[Password=***;Persist Security Info=True;User ID=++++;]+;
[Initial Catalog=Roznica;Data Source=SERVERTM;]
ocon.OPEN()
ors=CREATEOBJECT('ADODB.RecordSet')
ors.CursorLocation = 2
ors.DataSource.locktype = 1
ors.LockType = 1
ors.activeconnection = ocon
oRS.AddNew
Выдаёт ошибку,...т.е. мне надо добавить запись в БД Roznica, в таблицу Price...может кто подскажет, как надо сделать правильно....
...
Рейтинг: 0 / 0
Как добавить запись в ADO
    #35675426
ННовичокocon = CREATEOBJECT('ADODB.Connection')
ocon.connectionstring = ;
[Provider=SQLOLEDB.1;] + ;
[Password=***;Persist Security Info=True;User ID=++++;]+;
[Initial Catalog=Roznica;Data Source=SERVERTM;]
ocon.OPEN()
ors=CREATEOBJECT('ADODB.RecordSet')
ors.CursorLocation = 2
ors.DataSource.locktype = 1
ors.LockType = 1
ors.activeconnection = ocon
oRS.AddNew
Выдаёт ошибку,...т.е. мне надо добавить запись в БД Roznica, в таблицу Price...может кто подскажет, как надо сделать правильно....

По идее, надо сделать объект Command, прописать ему текст команды (select или insert), активную коннекцию и отправить на выполнение.
Если в Cоmmand был запрос выборки (select), то результат надо поместить в рекордсет. Примерно так (надо проверять):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
cmd = createobject('ADODB.Command')
cmd.CommandText = "select * from Price"
cmd.CommandType = Text
cmd.Connection = ocon
ors = cmd.Exec()
...
cmd.CommandText = "insert into Price..."
cmd.Exec();
...
...
Рейтинг: 0 / 0
Как добавить запись в ADO
    #35675503
ННовичок
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Станислав С...кий,

А через Recordset разве нельзя вставить запись в таблицу базы, метод AddNew, куда добавляет запись в выбранный курсор или прямо в таблицу базы?
Методы Recordset работают только с выборанным из таблицы курсором?
...
Рейтинг: 0 / 0
Как добавить запись в ADO
    #35675544
ННовичок,

AddNew добавляет записи в RecordSet, чтобы они появились в таблице надо у Recordset'а вызвать функцию Update (для обновления одной записи) или BatchUpdate (для обновления нескольких записей)

AddNew может и не добавить записи, а выдать ошибку. Это происходит в том случае, если используется нединамический RecordSet (тип: ForwardOnly или Static).

Подробнее см. в справке (MSDN)
...
Рейтинг: 0 / 0
Как добавить запись в ADO
    #35675573
ННовичок
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Станислав С...кий,

Да нет, меня update не интересует
вот код, работает без ошибок
ocon = CREATEOBJECT('ADODB.Connection')
ocon.connectionstring = ;
[Provider=SQLOLEDB.1;] + ;
[Password=*******;Persist Security Info=True;User ID=********;]+;
[Initial Catalog=Roznica;Data Source=SERVERTM;]
ocon.OPEN()
ors=CREATEOBJECT('ADODB.RecordSet')
ors.activeconnection = ocon
ors.Open("nomzen",ocon,2, 3, 0)
*ors.CursorLocation = 3
*ors.DataSource.locktype = 3
*ors.LockType = 3
ocon.BeginTrans ()
oRS.AddNew
ocon.CommitTrans()
но когда захожу enterprise в MSSQL, то в таблице nomzen записи нет, конечно можно через объект command вставить insertом запись, но хотелось бы попробовать более правильно через RecordSet
...
Рейтинг: 0 / 0
Как добавить запись в ADO
    #35675588
Интересно, ради чего столько траха?
...
Рейтинг: 0 / 0
Как добавить запись в ADO
    #35675597
ННовичок
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
проходящий.,

не всегда понимаешь ради чего..:-)), опробовав три метода ThruPath, ODBS и ADO, более удобным показалось работать с объектами ADO(как и всё по аналогии Microsoftовское, с Excel, и т.д...:-)))
...
Рейтинг: 0 / 0
Как добавить запись в ADO
    #35675616
ННовичокпроходящий.,

не всегда понимаешь ради чего..:-)), опробовав три метода ThruPath, ODBS и ADO, более удобным показалось работать с объектами ADO(как и всё по аналогии Microsoftовское, с Excel, и т.д...:-)))
С ADO удобнее, чем с ODBC?
ThruPath - это SQL Pass-Through? Если да, то это совсем из другой оперы.
Есть подозрения в плохом понимании предмета.
...
Рейтинг: 0 / 0
Как добавить запись в ADO
    #35675648
ННовичок
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вы совершенно правы, я плохо разбираюсь в предмете, поэтому и задаю глупые вопросы..:-), но задачи я сдаю в срок(ну не настолько гениальные и изящные), но они работают и пока возникают пожелания только расширения функционала...:-))
...
Рейтинг: 0 / 0
Как добавить запись в ADO
    #35675671
ННовичокВы совершенно правы, я плохо разбираюсь в предмете, поэтому и задаю глупые вопросы..:-), но задачи я сдаю в срок(ну не настолько гениальные и изящные), но они работают и пока возникают пожелания только расширения функционала...:-))
И каким боком к обсуждаемому вопросу относятся сроки написания программ и их работоспособность? Или просто нет никакого желания разобраться таки в предмете и научиться писать более изящные программы еще быстрее?
...
Рейтинг: 0 / 0
Как добавить запись в ADO
    #35675680
ННовичокСтанислав С...кий,

Да нет, меня update не интересует

А вот это зря! Update/BatchUpdate отсылает измененные данные одной/нескольких записей на сервер!!!
Потому Вы ваши данные и не видите :-)
Прочитайте-таки инструкцию
...
Рейтинг: 0 / 0
Как добавить запись в ADO
    #35675801
ННовичок
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
проходящий.,

Я всё равно не буду с Вами пикироваться, у вас много ценных советов...
...
Рейтинг: 0 / 0
Как добавить запись в ADO
    #35675820
ННовичок
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Станислав С...кий,

Да, после update, запись появилась в таблице, спасибо...., правда
вот эти параметры 2,3,0 подобрал перебором...а MSDN он на английском..
ors.Open("nomzen",ocon,2, 3, 0)
...
Рейтинг: 0 / 0
Как добавить запись в ADO
    #35675843
ННовичокпроходящий.,

Я всё равно не буду с Вами пикироваться, у вас много ценных советов...
А может я как раз во время пикировки еще что-нить ценное выдам? :) Ценные советы стали лишними? :)
...
Рейтинг: 0 / 0
Как добавить запись в ADO
    #35675954
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ННовичокопробовав три метода ThruPath, ODBS и ADO, более удобным показалось работать с объектами ADO(как и всё по аналогии Microsoftовское, с Excel, и т.д...:-)))
Думаю, правильнее сказать не "более удобные", а "более привычные".

Только следует иметь в виду, что для FoxPro работа через ADO - "не естесственная". В том смысле, что в FoxPro не предусмотрено никаких встроенных обработчиков для работы с ADO. Придется все и везде прописывать "руками". Очень много ручной работы.

С другой стороны, ODBC интегрировано в среду FoxPro. Т.е. много чего автоматизировано. Будет меньше ручной работы.

Впрочем, в VFP8 появился объект CursorAdapter, который позволяет "обернуть", в том числе, и работу по ADO. "Обернуть" в смыле скрыть всю необходимую ручную работу.

Пример от Алексея Цингауза (один из разроботчиков FoxPro) по работе с ADO через CursorAdapter. Вам надо только подставить свои значения для полей таблицы и реквизитов подключения.

Код: 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.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
********************************    
  *Here is an example for ADO data source type, when Recordset is used to update data source.    
        
    SET EXCLUSIVE OFF    
    SET MULTILOCKS ON    
    SET DELETED ON    
    CLOSE DATABASES ALL     
        
    CLEAR     
        
    oCA=CREATEOBJECT("CACategoriesAdo2")    
    IF !oCA.AutoOpen()    
    	AERROR(aerrs)  
    	DISPLAY MEMORY LIKE aerrs  
    	RETURN   
    ENDIF  
    WAIT WINDOW "Insert/Update/Delete records in the BROWSE"    
    BROWSE NORMAL    
        
        
    DEFINE CLASS CACategoriesAdo2 AS CursorAdapter    
    	Alias="CACategories"    
        
  	* set data source type, SELECT command and cursor schema    
    	DataSourceType="ADO"    
    	SelectCmd="select CategoryId, CategoryName, Description from categories"    
    	CursorSchema="Id I, Name C(15), Descr M"    
    	Tables ="categories"  
    	UpdatableFieldList = "Name, Descr"  
    	KeyFieldList = "Id"  
    	UpdateNameList = "Id categories.CategoryId, Name categories.CategoryName, Descr categories.Description"  
    
    	InsertCmdRefreshFieldList = "Id"  
        
    	PROCEDURE Init    
    		LOCAL oCon as ADODB.Connection, oRS as ADODB.Recordset    
        
  		* When object is created, create ADO connection object and connect    
  		* to the Northwind database on the local SQL Server    
    		oCon=CREATEOBJECT("ADODB.Connection")    
    		oCon.Open("Provider=SQLOLEDB.1;Integrated Security=SSPI;Initial Catalog=Northwind;Data Source=(local)")    
        
  		* Create Recordset object and configure it for data source update,    
    		oRs=CREATEOBJECT("ADODB.Recordset")    
    		oRS.ActiveConnection=oCon    
    		oRS.CursorLocation =  3   && adUseClient   
    		oRS.CursorType=  1   && adOpenKeyset  
    		oRS.LockType=  3   && adLockOptimistic  
        
    		this.DataSource=oRS			    
    	ENDPROC    
        
    	FUNCTION AutoOpen()    
    		NODEFAULT     
    		RETURN this.CursorFill(.T.,.F.,- 1 ) && use schema     
    	ENDFUNC    
        
    ENDDEFINE    
  ********************************   

Смысл в том, что формируется некий курсор, с которым вы работаете в среде FoxPro как с обычной таблицей. Можете добавлять/удалять/изменять записи. И все эти модификации автоматически будут переносится в исходные таблицы.

При работе через ODBC код будет почти такой же. Ну, разве что, не надо создавать объект RecordSet.
...
Рейтинг: 0 / 0
Как добавить запись в ADO
    #35676269
ННовичок
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, но тут есть ряд вопросов, конечно это пример...но всё же

oRS.CursorLocation = 3 && adUseClient
Зачем курсор надо создавать на клиенте, тогда пойдёт цепочка настроек Fetcheй и т.д., пусть создаётся на сервере, а в CursorFill(.T., .F., 0, oRs), прописать источником RecordSet, ведь если открыт объект RecordSet, то и пользоваться надо всеми его функциями (по аналогии с Excel, это выглядело бы так, открываем методом Excel, добавляем запись методом Foxом, и смотрим через методы Excel, что там получилось)...я не совсем знаток всех этих дел, но пришёл к мнению, что курсор Ад. использовать для просмотра записей в гриде(с помощью связи CursorFill(.T., .F., 0, oRs)), добавление, удаление обновление делается в отдельном окне(отдельной кнопке(Addnew)), где уже раз открыт ADO, то и пользоваться его методами....
Но скорей всего я просто не нашёл как добавить запись в эту чёртову базу в SQL, курсорадапт., так как грид у меня получался из трёх таблиц(а в примере всегода указана одна таблица)...но нашёл примеры в ADO, и по наименьшему сопротивлению...:-)))
...
Рейтинг: 0 / 0
Как добавить запись в ADO
    #35676281
ННовичокСпасибо, но тут есть ряд вопросов, конечно это пример...но всё же

oRS.CursorLocation = 3 && adUseClient
Зачем курсор надо создавать на клиенте, тогда пойдёт цепочка настроек Fetcheй и т.д., пусть создаётся на сервере
Серверный курсор = большое тормозилово на сервере. Оно надо?
...
Рейтинг: 0 / 0
Как добавить запись в ADO
    #35676337
ННовичок
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
проходящий.,

не очевидно и голословно...
...
Рейтинг: 0 / 0
Как добавить запись в ADO
    #35676344
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ННовичокпроходящий.,

не очевидно и голословно...

Э-э-э, как говорили классики марксизма-ленинизма, практика критерий истины, попробуйте и напишите о своих результатах
...
Рейтинг: 0 / 0
Как добавить запись в ADO
    #35676369
ННовичокпроходящий.,

не очевидно и голословно...
Неочевидно тем, кто плохо знает серверную кухню. Зантоки серверной кухни использую серверные курсоры толлько в случае крайней необходимости.
...
Рейтинг: 0 / 0
Как добавить запись в ADO
    #35676711
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ННовичокСпасибо, но тут есть ряд вопросов, конечно это пример...но всё же
Вы опять "ищете там где светло, а не там, где потеряли".

Я же вам уже говорил, что технология ADO для FoxPro "не родная". FoxPro рассматривает данные как реляционные таблицы, а ADO - как набор взаимосвязанных объектов.

Для работы FoxPro, вам так или иначе, но придется сформировать из набора объектов ADO - некую таблицу. "Курсор" в терминологии ADO - это далеко не то же самое, что "курсор" в терминологии FoxPro.

Для FoxPro "курсор" - это обычная таблица DBF, которая хранится не на диске, а в памяти.

Для ADO "курсор" - это некий специфический набор объектов.

Другими словами, FoxPro должен "выковырить" из RecordSet все данные и сформировать на их основе таблицу. Соответственно, чтобы передать модификации из FoxPro обратно, необходимо будет "разложить" таблицу на "составляющие" объекты для RecordSet.

А это значит, что вы в любом случае должны будете закачать ВСЕ данные RecordSet на клиента. Где при этом будет находится курсор-ADO, думаю, особой роли не играет.

Но это при ЧТЕНИИ данных. А что при записи?

А это зависит от используемой вами идеологии построения работы. Если вы отдаете процесс записи на откуп FoxPro (не перекрываете у CursorAdapter настройки InsertCmd, UpdateCmd, DeleteCmd), то логично и курсор-ADO создавать на клиенте.

А вот если процесс записи - это некая процедура, запускаемая именно на сервере, то логично и курсор-ADO создавать на сервере, поскольку на клиенте он вообще никак не модифицируется.

Однако все эти соображения требуют проверки. Это мои предположения, исходя из примеров, приводимых Алексеем Цингаузом вот здесь

http://forum.foxclub.ru/read.php?29,184077,191045
...
Рейтинг: 0 / 0
Как добавить запись в ADO
    #35678094
ННовичок
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я и не говорю, что я хорошо знаю "серверную кухню", поэтому я с этими ответами пойду на другие форумы и там отвечу, вашими словами...ну и выберу, что наиболее убедительно...Но ещё раз повторюсь, MSSQL, это микрософтовская штучка...и если есть навык работы писать
oexcel.cell(1,1).value<>1, то почему бы по аналогии не написать
rs.Fields("Article").value <> 1
Правда насчёт курсоров я засомневался(нет опыта, навыка, поэтому и сомнения)....ну цифру с "2" на "3" (в CursorLocation) можно сменить, важно выбрать идеологию в курсорадаптере (ADO или ODBC)...а после ответа Максима, я что-то стал сомневаться...наверное надо попробовать вариант на ODBC...
Кстати если продолжать аналогию с Excel(MSSQL), то тоже заполнение таблицы Fox(a), можно проводить и с помощью объектов Exel (replace field1 with oExcel.cell(1,1)), и с помощью команд (import from...append from)...
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как добавить запись в ADO
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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