|
|
|
Обмен с Access через ADO при поиске выдёт ошибку HELP! времени в обрез | ☑ | ||
|---|---|---|---|---|
|
0
LanLion
29.07.06
✎
16:34
|
Метод "seek", на 1с8.0, примеров я не нашел, как на 7.7 не получается:
Табл.Seek("=", КодАО, КодПодр, КодИК, НомОб); в таблице 4 ключевых поля пишет, что "Ошибка при вызове метода контекста (Seek): Неверное число параметров" Кто знает подстажите приз какой у него синтаксис? |
|||
|
1
х86
29.07.06
✎
16:47
|
давай подробнее что и где ищешь
|
|||
|
2
ШтушаКутуша
29.07.06
✎
16:47
|
(0) нужно указать имя поля:
Табл.seek("FieldName="+<Значение>.... и если поле текстовое,то не забудь одинарную кавычку "'" |
|||
|
3
ШтушаКутуша
29.07.06
✎
16:49
|
+2 и ваще,пользуйся Filter("ИмяПоля1=<Значение> AND ИмяПоля2=<Значение> AND...."
|
|||
|
4
LanLion
29.07.06
✎
16:50
|
Ищу запись по 4 члючевым полям
|
|||
|
5
LanLion
29.07.06
✎
16:52
|
Табл.Seek("=", КодАО, КодПодр, КодИК, НомОб);
Табл.Filter("reg_nom_vi"=КодАО and .... ); - так надо? |
|||
|
6
ШтушаКутуша
29.07.06
✎
16:55
|
Seek требует ключей,насколько я помню,Filter-нет.
Поэтому лучше юзать его...на первых порах.... Табл.Filter("reg_nom_vi='КодАО' and .... "); если КодАО строковый,а если нет то без одинарной кавычки |
|||
|
7
LanLion
29.07.06
✎
16:57
|
КодАо -это реквизит
|
|||
|
8
ШтушаКутуша
29.07.06
✎
16:57
|
+ то есть Табл.Filter("reg_nom_vi='"+СокрЛП(КодАО)+"' AND...."); если строк. тип,иначе: Табл.Filter("reg_nom_vi="+Строка(КодАО)+" AND....");
|
|||
|
9
ШтушаКутуша
29.07.06
✎
16:59
|
(7) :)))) Неужели? тогда читай:"если тип реквизита строковый или другой"
|
|||
|
10
LanLion
29.07.06
✎
17:00
|
Ясно спасибо большое, буду пробовать, целый день на 4 форумах никто и слова не сказал. ешё раз спасибо
|
|||
|
11
ШтушаКутуша
29.07.06
✎
17:03
|
(10) а в след раз,зайди MS Access и там....все-все есть и с примерами!
Ну дерзай :) да благо те будет! :)))) |
|||
|
12
LanLion
29.07.06
✎
17:05
|
Упс.
Ошибка при вызове метода контекста (Filter): Неверное число параметров edit.Filter("reg_nom_vi"=5028 and "id_predpr"= поиск.ИмяПД and "id_ik"= поиск.ИмяИК and "id_zdan"=поиск.ИмяСчетчика); У таблицы 4 ключевых поля: NOM_REG_VI число id_predpr число id_ik число id_zdan Счетчик |
|||
|
13
ШтушаКутуша
29.07.06
✎
17:14
|
попробуй,для начала:
edit.Filter("reg_nom_vi=5028"); работает? |
|||
|
14
ШтушаКутуша
29.07.06
✎
17:15
|
поле reg_nom_vi во внешней БД строковое?
|
|||
|
15
LanLion
29.07.06
✎
17:15
|
edit=new COMobject("ADODB.RecordSet");
connectstring="Driver={Microsoft Access Driver (*.mdb)};Dbq="+"D:\Не фин капитал\5028_АО\nfin_АО5028.mdb" +";"; edit.Open("zdania",connectstring,1,3); edit.Filter("reg_nom_vi"=5028 and "id_predpr"= поиск.ИмяПД and "id_ik"= поиск.ИмяИК and "id_zdan"=поиск.ИмяСчетчика); //Вся картина |
|||
|
16
LanLion
29.07.06
✎
17:16
|
сейчас попробую
|
|||
|
17
ШтушаКутуша
29.07.06
✎
17:16
|
если строковое,тогда:
edit.Filter("reg_nom_vi='5028'"); |
|||
|
18
ШтушаКутуша
29.07.06
✎
17:17
|
обрати внимание на одинарную кавычку слева и справа!!!
|
|||
|
19
LanLion
29.07.06
✎
17:18
|
{Форма.Форма(741)}: Преобразование значения к типу Булево не может быть выполнено
edit.Filter("reg_nom_vi=5028" and "id_predpr=поиск.ИмяПД" and "id_ik= поиск.ИмяИК" and "id_zdan=поиск.ИмяСчетчика"); |
|||
|
20
ШтушаКутуша
29.07.06
✎
17:24
|
Начни с одного поля,
а в and "id_predpr=поиск.ИмяПД" and "id_ik= поиск.ИмяИК" БРЕД!! Буть внимательней! как это может быть? вот как надо,примерно: "id_predpr="+поиск.ИмяПД+" AND "id_ik="+ поиск.ИмяИК); ЕСЛИ ПОЛЯ в БД!!! СТРОКОВЫЕ не забудь одинарные кавычки после знака равенства и после подстановки значения! "id_predpr='"+поиск.ИмяПД+"' AND "id_ik='"+ поиск.ИмяИК+"'"); |
|||
|
21
ШтушаКутуша
29.07.06
✎
17:25
|
ну и про приведение к типу не забудь,если поля числовые,то приведи их к строковому значению!
|
|||
|
22
Neco
29.07.06
✎
17:33
|
А если попробовать через Seek:
Судя по: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ado270/htm/mdmthseek.asp |
|||
|
23
LanLion
29.07.06
✎
17:36
|
1) edit.Filter("reg_nom_vi="+строка(5028));
2) edit.Filter("reg_nom_vi=5028"); 3) edit.Filter("reg_nom_vi="+строка(5028)+" and "+"id_predpr="+поиск.ИмяПД+" and "+"id_ik="+ поиск.ИмяИК+" and "+"id_zdan="+поиск.ИмяСчетчика); Все реквизиты числовые на все варианты один ответ "Ошибка при вызове метода контекста (Filter): Неверное число параметров" Может дело в другом? |
|||
|
24
LanLion
29.07.06
✎
17:39
|
Ошибка при вызове метода контекста (Seek): Произошла исключительная ситуация (ADODB.Recordset): Текущий проводник не поддерживает необходимый интерфейс для функции Index.
edit.Seek(М,1); |
|||
|
25
LanLion
29.07.06
✎
17:41
|
Ошибка при установке значения атрибута контекста (Index): Произошла исключительная ситуация (ADODB.Recordset): Текущий проводник не поддерживает необходимый интерфейс для функции Index.
edit.Index = "PrimaryKey"; при Установке индекса , что за "Проводник" |
|||
|
26
ШтушаКутуша
29.07.06
✎
17:42
|
попробуй строку инициализации св-ва Connect "DSN=<ODBC_NAME>;UID=<пользователь>;PWD=<пароль>;"
если пользователя и пароля нет,то "DSN=<ODBC_NAME>;UID=;PWD=;" |
|||
|
27
ШтушаКутуша
29.07.06
✎
17:43
|
покажи код открытия коннекта к БД и код открытия таблицы и убери
edit.Index = "PrimaryKey"! |
|||
|
28
LanLion
29.07.06
✎
17:44
|
edit=new COMobject("ADODB.RecordSet");
connectstring="Driver={Microsoft Access Driver (*.mdb)};Dbq="+"D:\Не фин капитал\5028_АО\nfin_АО5028.mdb" +";"; edit.Open("zdania",connectstring,1,3); |
|||
|
29
LanLion
29.07.06
✎
17:47
|
edit.Open("zdania",connectstring,1,3);
а что означают 3 и 4 параметр? (значения 1,3 взял из примера) |
|||
|
30
Neco
29.07.06
✎
17:50
|
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ado270/htm/mdmthcnnexecute.asp |
|||
|
31
LanLion
29.07.06
✎
17:50
|
<ODBC_NAME> - какое писать
|
|||
|
32
Neco
29.07.06
✎
17:51
|
Упс в (30) не то, вот что нужно:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ado270/htm/mdmthcnnexecute.asp |
|||
|
33
ШтушаКутуша
29.07.06
✎
17:53
|
Index устанавливать не здесь а при открытии таблицы в свойстве CursorType,
например: cur_name_table="SELECT * FROM <ИмяТаблицы>"; CursorType=adOpenDynamic; //или adOpenStatic или adOpenKeySet LockType=adLockOptimistic; cur_cnn=new COMobject("ADODB.Connection"); cur_rs=new COMobject("ADODB.Recordset"); cur_cnn.Open("DSN=<ODBC_NAME>;UID=;PWD=;"); cur_cnn.Open(cur_name_table, cur_cnn, CursorType, LockType); //или cur_cnn.Open(cur_name_table, cur_cnn); cur_rs.MoveLast cur_rs.MoveFirst cur_rs.Filter...... |
|||
|
34
LanLion
29.07.06
✎
17:55
|
connectstring="Driver={Microsoft Access Driver (*.mdb)};DSN=ADODB;UID=;PWD=;Dbq="+"D:\Не фин капитал\5028_АО\nfin_АО5028.mdb" +";";
Если Filter, то: Ошибка при вызове метода контекста (Filter): Неверное число параметров Если Seek, то: {Форма.Форма(587)}: Ошибка при вызове метода контекста (Seek): Произошла исключительная ситуация (ADODB.Recordset): Текущий проводник не поддерживает необходимый интерфейс для функции Index. edit.Seek(М,1); |
|||
|
35
ШтушаКутуша
29.07.06
✎
17:55
|
+33 пардон: после строки cur_cnn.Open,
след строку читать,как cur_rs |
|||
|
36
Neco
29.07.06
✎
18:03
|
А точно поля проиндексированы?
|
|||
|
37
LanLion
29.07.06
✎
18:05
|
А как это определить?, ну простите вы чайника
|
|||
|
38
LanLion
29.07.06
✎
18:07
|
(33) а чему равны adOpenDynamic и adLockOptimistic?
CursorType и базы строковый параметр. |
|||
|
39
LanLion
29.07.06
✎
18:07
|
(33) а чему равны adOpenDynamic и adLockOptimistic?
CursorType у базы строковый параметр. |
|||
|
40
ШтушаКутуша
29.07.06
✎
18:07
|
да не надо те думать о том:"какие поля проиндексированы?"
|
|||
|
41
ШтушаКутуша
29.07.06
✎
18:08
|
опусти их! попробуй: cur_rs.Open(cur_name_table, cur_cnn);
|
|||
|
42
ШтушаКутуша
29.07.06
✎
18:09
|
и не забудь после работы:
cur_rs.Close; cur_cnn.Close; |
|||
|
43
LanLion
29.07.06
✎
18:14
|
connectstring="Driver={Microsoft Access Driver (*.mdb)};DSN=<ODBC_NAME>;UID=;PWD=;Dbq="+"D:\Не фин капитал\5028_АО\nfin_АО5028.mdb" +";";
cur_name_table="SELECT * FROM zdania"; cur_cnn=new COMobject("ADODB.Connection"); cur_rs=new COMobject("ADODB.Recordset"); cur_cnn.Open(connectstring);// "DSN=<ODBC_NAME>;UID=;PWD=;" cur_rs.Open("zdania", cur_cnn); cur_rs.Filter("reg_nom_vi=5028"); Я правильно написал? Ошибка при вызове метода контекста (Filter): Неверное число параметров cur_rs.Filter("reg_nom_vi=5028"); |
|||
|
44
LanLion
29.07.06
✎
18:15
|
DSN=<ODBC_NAME>;UID=;PWD=; я его вто место впихнул?
|
|||
|
45
LanLion
29.07.06
✎
18:18
|
Хоть врубай перебором и оставляй наночь
|
|||
|
46
ШтушаКутуша
29.07.06
✎
18:18
|
сформируй ODBC_NAME: Панель управления,Администрирование,ODBC источники данных...задай новый источник:укажи его имя и выбери БД.mdb
connectstring="DSN=<ODBC_NAME>;UID=;PWD=;" |
|||
|
47
ШтушаКутуша
29.07.06
✎
18:21
|
например ODBC_NAME ты задал mdb_source,тогда
connectstring="DSN=mdb_source;UID=;PWD=;" cur_name_table="SELECT * FROM zdania"; cur_cnn=new COMobject("ADODB.Connection"); cur_rs=new COMobject("ADODB.Recordset"); cur_cnn.Open(connectstring);// "DSN=<ODBC_NAME>;UID=;PWD=;" cur_rs.Open(cur_name_table, cur_cnn); //<-----!!!!!!!!!!!!!!!!!!!!!!!!!!!! cur_rs.Filter("reg_nom_vi=5028"); cur_rs.Close; cur_cnn.Close; |
|||
|
48
LanLion
29.07.06
✎
18:27
|
Теже ошибки и с seek и с Filter, DSN привязал к моему файлику и пользовательский и системный
|
|||
|
49
ШтушаКутуша
29.07.06
✎
18:29
|
(48) перезагрузись
|
|||
|
50
ШтушаКутуша
29.07.06
✎
18:30
|
и на куа системный? достаточно было указать пользовательский DNS
|
|||
|
51
ШтушаКутуша
29.07.06
✎
18:31
|
cur_rs.Open(cur_name_table, cur_cnn);
у тебя так? |
|||
|
52
LanLion
29.07.06
✎
18:33
|
cur_name_table="SELECT * FROM zdania";
cur_cnn =new COMobject("ADODB.Connection"); cur_rs =new COMobject("ADODB.Recordset"); cur_cnn .Open("DSN=new;UID=;PWD=;"); cur_rs .Open(cur_name_table, cur_cnn); cur_rs .Filter("reg_nom_vi=5028"); |
|||
|
53
LanLion
29.07.06
✎
18:40
|
Ладно Александр, пора домой вечером буду долбаться да и прощай воскресенье, что нибудь да придумаю, большое спасибо хоть буду знать в какой яме рыться.
Извини за надоедливость. |
|||
|
54
ШтушаКутуша
29.07.06
✎
18:52
|
(53) да,ладно!
а вот точки,как понимать: cur_cnn .Open("DSN=new;UID=;PWD=;"); cur_rs .Open(cur_name_table, cur_cnn); cur_rs .Filter("reg_nom_vi=5028"); |
|||
|
55
shuhard
29.07.06
✎
19:58
|
Отфильтровать по ключам можно и посредством Where:
MyCon = Новый COMОбъект ("ADODB.Connection"); MyCon.Open ("Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=D:\1c_common\Реальный_сектор\TEL_BASE2006.MDB"); MyRst = Новый COMОбъект ("ADODB.Recordset"); MyStr = "select * from zdania where NOM_REG_VI=1 and id_predpr=1 and id_ik=1 and id_zdan=1"; MyRst.Open (MyStr, MyCon, 3, 1); MyStr = "select * from zdania where NOM_REG_VI=1 and id_predpr=1 and id_ik=1 and id_zdan=1"; Пока НЕ MyRst.EOF Цикл Сообщить(Строка(MyRst.Fields("NOM_REG_VI").Value) + "->" + Строка(MyRst.Fields("id_predpr").Value)); MyRst.MoveNext(); КонецЦикла; |
|||
|
56
romix
модератор
29.07.06
✎
20:08
|
Какой еще seek - SELECT в языке запросов SQL надо юзать...
Через ADO он рулит для всех источников данных (меняется только строка подключения). Книга знаний: Пример работы с файлами DBF по интерфейсу ADO |
|||
|
57
romix
модератор
29.07.06
✎
20:09
|
(55) Да, вот именно!
|
|||
|
58
ШтушаКутуша
30.07.06
✎
12:06
|
(56) Парень бы не потянул. А ваще бывает нужда в seek и filter
|
|||
|
59
LanLion
31.07.06
✎
08:15
|
Вся штучка в том что найти не проблема (с запросами у меня проблем нет) нужно потом изменить эту запись. Если есть способ аналогичный 1с8(получитьобъект()) в acceess подскажите.
Или нечто вроде: из найденной записи узнать её номер в таблице, а потом в отдельном объекте OLE, сказать нечто вроде "получить(Номстр)". |
|||
|
60
vde69
31.07.06
✎
08:52
|
(59) тогда делай примерно так (только под 8.0 заточи чуток):
Функция ОтправитьДК(Connection) // возвращает список дат проводок Command = СоздатьОбъект("ADODB.Command"); Command.ActiveConnection = Connection; Рег=СоздатьОбъект("Регистры"); сп=СоздатьОбъект("Справочник.ДисконтныеКарты1"); сп.ВыбратьЭлементы(); е1=0; Пока сп.ПолучитьЭлемент() = 1 Цикл е1=е1+1; КонецЦикла; сп.ВыбратьЭлементы(); е=0; Пока сп.ПолучитьЭлемент() = 1 Цикл е=е+1; Состояние("Идет отправка ДК " + глИндикатор(е,е1)); Код = СокрЛП(сп.Код); Сумма = Число(Рег.ДисконтныеКарты.Остаток(сп.ТекущийЭлемент(),"Сумма")); Процент = Число(глПолучитьСкидкуПоДисконтнойКарте(0,сп.ТекущийЭлемент())); Если сп.СуммаОтправленная<>сумма Тогда Command.CommandType=1; Command.CommandText="SELECT * FROM s_dk_ WHERE dk='"+ код + "'"; Try Set=Command.Execute(); Except Предупреждение(ОписаниеОшибки()); Возврат -1; EndTry; Если Set.EOF()<>-1 тогда Command.CommandText="UPDATE s_dk_ SET | dk='" + код + "', | price='" + Сумма + "', | pr='" + Процент + "' | WHERE dk='"+ код + "'"; Иначе Command.CommandText="INSERT s_dk_ (dk, price, pr) VALUES ( | '" + код + "', | '" + сумма + "', | '" + Процент + "' ) "; КонецЕсли; Try Set=Command.Execute(); сп.СуммаОтправленная=сумма; сп.Записать(); Except Предупреждение(ОписаниеОшибки()); Возврат -1; EndTry; КонецЕсли; КонецЦикла; Возврат 1; КонецФункции |
|||
|
61
774816
31.07.06
✎
09:27
|
(59) что бы найти и обнавить запись лучше использовать command
с запросом типа Update table set tb1=1 where tb1=2 2. номер записи может зависить от сортировки или от ее отсутсвия. если есть колонка номер записи то можно попробовать данные одного рекорсета присвоить новому и уже по новому фильтровать MyRst = Новый COMОбъект ("ADODB.Recordset"); MyRst1 = Новый COMОбъект ("ADODB.Recordset"); после выборки по первому прописать MyRst1=MyRst.Clone MyRst1.Filter итд.. |
|||
|
62
shuhard
31.07.06
✎
10:07
|
Изменять запись можно и через RecordSet, метод Update, поле Resultat:
MyCon = Новый COMОбъект ("ADODB.Connection"); MyCon.Open ("Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=D:\1c_common\Реальный_сектор\TEL_BASE2006.MDB"); MyRst = Новый COMОбъект ("ADODB.Recordset"); MyStr = "select * from zdania where NOM_REG_VI=1 and id_predpr=1 and id_ik=1 and id_zdan=1"; MyRst.Open (MyStr, MyCon, 2, 3);//adOpenDynamic, adLockOptimistic Сообщить("До->"+Строка(MyRst.Fields("Resultat").Value)); MyRst.Fields("Resultat").Value="Киргуду"; // Присвоение MyRst.Update(); //Запись Сообщить("После->"+Строка(MyRst.Fields("Resultat").Value)); MyRst.Close(); MyCon.Close(); |
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |