Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) ПрисоединитьИБ() (число прочтений - 5531 )
U_zer
Экс-Участник


ПрисоединитьИБ()
29. Января 2009 :: 11:57
Печать  
Всем привет!

Че-то ничего не понимаю ...
Код
Выбрать все
	БД = СоздатьОбъект("OdbcDataBase");
	Попытка
		БД.ПрисоединитьИБ(СокрЛП(ВыбПутьКБазе),СокрЛП(ВыбПольз), СокрЛП(ВыбПароль));
		Запрос = СоздатьОбъект("OdbcRecordSet");
		Запрос.УстБД(БД);

	Исключение
		Сообщить(ОписаниеОшибки());
		Возврат;
	КонецПопытки;

select
СпрТ.Code [Код $строка],
РегОст.ресКоличествоОстаток [Кол $число]
from $РегистрОстатки.Товары(:ДКон~,
inner join $Справочник.Склады СпрС (nolock) on СпрС.id = измСклад, СпрС.Code = :ВыбСкл, (измТовар, измСклад), ресКоличество) РегОст
inner join $Справочник.Товары СпрТ (nolock) on СпрТ.id = РегОст.измТовар

Запрос.УстановитьТекстовыйПараметр("ВыбСкл", фрмСклад.Код);
Запрос.УстановитьТекстовыйПараметр("ДКон", фрмДатаКонечная);
Тзн = Запрос.ВыполнитьИнструкцию(ТЗ);

 



Выдает Meta name parser error: не указан параметр ":ВыбСкл"
Блин, :ДКон почему-то проходит ... В чем засада?
  
Наверх
 
IP записан
 
mov68
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 180
Зарегистрирован: 21. Декабря 2007
Re: ПрисоединитьИБ()
Ответ #1 - 29. Января 2009 :: 14:23
Печать  
Насколько я понимаю со своими небольшими познаниями,
Запрос.УстановитьТекстовыйПараметр("ВыбСкл", фрмСклад.Код);
пытается сконвертировать код как ссылку объекта,
2 решения
1) СпрС.Code ='"+ фрмСклад.Код+"" и т.д.
2)on СпрС.id = :ВыбСкл
и Запрос.УстановитьТекстовыйПараметр("ВыбСкл", фрмСклад);
  
Наверх
 
IP записан
 
U_zer
Экс-Участник


Re: ПрисоединитьИБ()
Ответ #2 - 30. Января 2009 :: 07:02
Печать  
mov68 писал(а) 29. Января 2009 :: 14:23:
Насколько я понимаю со своими небольшими познаниями,
Запрос.УстановитьТекстовыйПараметр("ВыбСкл", фрмСклад.Код);
пытается сконвертировать код как ссылку объекта,
2 решения
1) СпрС.Code ='"+ фрмСклад.Код+"" и т.д.
2)on СпрС.id = :ВыбСкл
и Запрос.УстановитьТекстовыйПараметр("ВыбСкл", фрмСклад);


Пятерка тебе!!  Улыбка По первому пункту заработало!
Но вот это:

Запрос.УстановитьТекстовыйПараметр("ВыбСкл", фрмСклад.Код);
пытается сконвертировать код как ссылку объекта


Если несложно, господа разработчики, поясните, так это или нет?
Если так, то ИМХО это косяк, ведь тип параметра должен приводиться к тому типу, с чем сравниваем, иначе как вообще может это работать?
  
Наверх
 
IP записан
 
sadovnikov
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 420
Зарегистрирован: 06. Марта 2007
Re: ПрисоединитьИБ()
Ответ #3 - 30. Января 2009 :: 08:01
Печать  
Цитата:
Запрос.УстановитьТекстовыйПараметр("ВыбСкл", фрмСклад.Код);
пытается сконвертировать код как ссылку объекта

Если несложно, господа разработчики, поясните, так это или нет?
Если так, то ИМХО это косяк, ведь тип параметра должен приводиться к тому типу, с чем сравниваем, иначе как вообще может это работать?

Брехня это. Все прекрасно работает. Например:

     ТекстЗапроса = "
     |Set NoCount ON
     |
     |SELECT
     |      ID
     |FROM
     |      спрНоменклатура
     |WHERE
     |      LTrim(Code) = :Код
     |";
     
     ЗапросСКЛ.УстановитьТекстовыйПараметр("Код", ВыбТовар.Код);
     РедакторТЗ(ЗапросСКЛ.ВыполнитьИнструкцию(ТекстЗапроса));
  
Наверх
 
IP записан
 
U_zer
Экс-Участник


Re: ПрисоединитьИБ()
Ответ #4 - 30. Января 2009 :: 09:10
Печать  
sadovnikov писал(а) 30. Января 2009 :: 08:01:
Цитата:
Запрос.УстановитьТекстовыйПараметр("ВыбСкл", фрмСклад.Код);
пытается сконвертировать код как ссылку объекта

Если несложно, господа разработчики, поясните, так это или нет?
Если так, то ИМХО это косяк, ведь тип параметра должен приводиться к тому типу, с чем сравниваем, иначе как вообще может это работать?

Брехня это. Все прекрасно работает. Например:

     ТекстЗапроса = "
     |Set NoCount ON
     |
     |SELECT
     |      ID
     |FROM
     |      спрНоменклатура
     |WHERE
     |      LTrim(Code) = :Код
     |";
     
     ЗапросСКЛ.УстановитьТекстовыйПараметр("Код", ВыбТовар.Код);
     РедакторТЗ(ЗапросСКЛ.ВыполнитьИнструкцию(ТекстЗапроса));


В этом случае работает, а в моем - нет! Попробуй передать параметр в виртуальную таблицу.
  
Наверх
 
IP записан
 
mov68
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 180
Зарегистрирован: 21. Декабря 2007
Re: ПрисоединитьИБ()
Ответ #5 - 30. Января 2009 :: 09:11
Печать  
sadovnikov писал(а) 30. Января 2009 :: 08:01:
Цитата:
Запрос.УстановитьТекстовыйПараметр("ВыбСкл", фрмСклад.Код);
пытается сконвертировать код как ссылку объекта

Если несложно, господа разработчики, поясните, так это или нет?
Если так, то ИМХО это косяк, ведь тип параметра должен приводиться к тому типу, с чем сравниваем, иначе как вообще может это работать?

Брехня это. Все прекрасно работает. Например:

     ТекстЗапроса = "
     |Set NoCount ON
     |
     |SELECT
     |      ID
     |FROM
     |      спрНоменклатура
     |WHERE
     |      LTrim(Code) = :Код
     |";
     
     ЗапросСКЛ.УстановитьТекстовыйПараметр("Код", ВыбТовар.Код);
     РедакторТЗ(ЗапросСКЛ.ВыполнитьИнструкцию(ТекстЗапроса));


Да, работает, если код не текстовый и ли в нем нет пробелов, в общем случае тогда ставь RTRIM(LTrim(Code)) = RTRIM(LTrim(:Код) т.е. на передаваемый параметр тоже (это в общем случае, для конкретного примера можно упростить)
  
Наверх
 
IP записан
 
mov68
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 180
Зарегистрирован: 21. Декабря 2007
Re: ПрисоединитьИБ()
Ответ #6 - 30. Января 2009 :: 09:14
Печать  
Как добавка к предыдущему: такую конструкцию использую при подключении к другой базе, когда по id связаться нельзя, если запрос в одной базе, то по ID надежнее (коды справочника могут и повторяться)
  
Наверх
 
IP записан
 
sadovnikov
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 420
Зарегистрирован: 06. Марта 2007
Re: ПрисоединитьИБ()
Ответ #7 - 30. Января 2009 :: 09:24
Печать  
mov68 писал(а) 30. Января 2009 :: 09:11:
Да, работает, если код не текстовый и ли в нем нет пробелов, в общем случае тогда ставь RTRIM(LTrim(Code)) = RTRIM(LTrim(:Код) т.е. на передаваемый параметр тоже (это в общем случае, для конкретного примера можно упростить)

Извини, конечно, но зачем бред-то писать??
  
Наверх
 
IP записан
 
sadovnikov
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 420
Зарегистрирован: 06. Марта 2007
Re: ПрисоединитьИБ()
Ответ #8 - 30. Января 2009 :: 09:25
Печать  
Цитата:
параметр в виртуальную таблицу.

Тут я пас. Не пользуюсь виртуальными таблицами.
  
Наверх
 
IP записан
 
mov68
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 180
Зарегистрирован: 21. Декабря 2007
Re: ПрисоединитьИБ()
Ответ #9 - 30. Января 2009 :: 10:27
Печать  
sadovnikov писал(а) 30. Января 2009 :: 09:24:
mov68 писал(а) 30. Января 2009 :: 09:11:
Да, работает, если код не текстовый и ли в нем нет пробелов, в общем случае тогда ставь RTRIM(LTrim(Code)) = RTRIM(LTrim(:Код) т.е. на передаваемый параметр тоже (это в общем случае, для конкретного примера можно упростить)

Извини, конечно, но зачем бред-то писать??


Бред, не бред, но навскидку 2 запроса из рабочих баз
ТекстЗапроса ="
                 |SELECT Номенклатура.ID [Авто $Справочник.Номенклатура]
                 |FROM $Справочник.Номенклатура AS Номенклатура
                 |WHERE (Ltrim($Номенклатура.Номер_по_каталогу) = Ltrim(:ВИН))
                 |AND (Номенклатура.ISMARK <> 1)";


ТекстЗапроса = "
| Select
| Z.*
| from SC33  as Z
| where Ltrim(Z.ID) = Ltrim(:ID) ";

Без обработки параметра не работает
  
Наверх
 
IP записан
 
sadovnikov
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 420
Зарегистрирован: 06. Марта 2007
Re: ПрисоединитьИБ()
Ответ #10 - 30. Января 2009 :: 10:37
Печать  
mov68 писал(а) 30. Января 2009 :: 10:27:
Без обработки параметра не работает

Руки, значит, из не оттуда растут... Чудес не бывает.
  
Наверх
 
IP записан
 
mov68
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 180
Зарегистрирован: 21. Декабря 2007
Re: ПрисоединитьИБ()
Ответ #11 - 30. Января 2009 :: 10:39
Печать  
sadovnikov писал(а) 30. Января 2009 :: 10:37:
mov68 писал(а) 30. Января 2009 :: 10:27:
Без обработки параметра не работает

Руки, значит, из не оттуда растут... Чудес не бывает.


Согласен, не оттуда, я лишь честно привожу рабочие куски кода. На личности переходить не будем
  
Наверх
 
IP записан
 
U_zer
Экс-Участник


Re: ПрисоединитьИБ()
Ответ #12 - 30. Января 2009 :: 11:09
Печать  
Замечу лишь, что эта хрень не работает только при сабже.
  
Наверх
 
IP записан
 
sadovnikov
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 420
Зарегистрирован: 06. Марта 2007
Re: ПрисоединитьИБ()
Ответ #13 - 30. Января 2009 :: 11:11
Печать  
mov68 писал(а) 30. Января 2009 :: 10:39:
На личности переходить не будем

Да и не собирался я на личности переходить. Просто:
1. Ltrim(:ВИН) - бред.
2. Ltrim(Z.ID) = Ltrim(:ID) - еще больший бред.
3. Где в запросах NoLock-и?
4. from SC33 - я правильно понял - это кусок кода именно из конфиги? Метапарсер для кого делался?
5. Z.* - что-то мне подсказывает, что вряд ли нужны именно все поля. Хотя, здесь могу быть очень не прав.
  
Наверх
 
IP записан
 
mov68
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 180
Зарегистрирован: 21. Декабря 2007
Re: ПрисоединитьИБ()
Ответ #14 - 30. Января 2009 :: 12:32
Печать  
sadovnikov писал(а) 30. Января 2009 :: 11:11:
mov68 писал(а) 30. Января 2009 :: 10:39:
На личности переходить не будем

Да и не собирался я на личности переходить. Просто:
1. Ltrim(:ВИН) - бред.
2. Ltrim(Z.ID) = Ltrim(:ID) - еще больший бред.
3. Где в запросах NoLock-и?
4. from SC33 - я правильно понял - это кусок кода именно из конфиги? Метапарсер для кого делался?
5. Z.* - что-то мне подсказывает, что вряд ли нужны именно все поля. Хотя, здесь могу быть очень не прав.


До меня к базе была привязана отдельная база SQL, в которой хранится часть информации,
А  from SC33 это для связи с другой базой 1С, метапарсер не конает (если уже есть возможность использовать метапарсер с присоединяемыми базами, укажи где смотреть - буду прыгать от восторга)
Ltrim(Z.ID) = Ltrim(:ID)  перестает быть бредом если понимать, что Z.ID и ID поля из разных баз
NoLock - согласен в этом случае
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать