Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 09:40 28.09.24 
Компютри и Интернет
   >> Delphi
Всички теми Следваща тема *Кратък преглед

Тема IBQuery.ParamByName('').Length ???нови  
АвторEFEX (Нерегистриран)
Публикувано13.12.06 21:11



DELPHI 7
Firebird

Как мога да прочета каква е дължината(Length) на параметър
IBQuery.ParamByName('FIELD_NAME')

Дължината се пази в private на
TIBXSQLVAR.FMaxLen

При сетване на параметрите не се прави проверка.
Проверката за коректноста на дължината се прави при Open/ExecSQL и тогава гърми че дължината е надвишена.

целта ми е процедура от вида:
IBQuery.ParamByName('THIS_FIELD').AsString :=
Copy(MyValue,1,
MyProcedureGetParamLength(IBQuery.ParamByName('THIS_FIELD')));

т.е. да се truncate-ва подаваната стойност

BeforeAnswer(10x);



Тема Re: IBQuery.ParamByName('').Length ???нови [re: EFEX]  
Автор Dark_Dirk (^)
Публикувано13.12.06 22:18



За TIBDataset го правим по следния много грозен начин:




ParamOK := FALSE;
repeat
try
(DataSource.DataSet as TIBDataSet).ParamByName('param name').AsString := s;
ParamOK := TRUE;
except
if (s = '') then
raise;
s := Copy(s, 1, Length(s) - 1);
end;
until ParamOK;


С прости думи: режем го с по един символ от края докато влезе .

Друг вариант е да си patch-неш IBX-a и да изкараш MaxLen като property в TIBXSQLVAR.



Тема Re: IBQuery.ParamByName('').Length ??? [re: EFEX]  
Автор andrew_nikoloff (bugbuster)
Публикувано13.12.06 22:27



Не знам защо, ама Params на IBQuery е направено да си връща пак TParams. Нали го знаеш ония виц за най-често споменавания мъж сред математиците - Коши. Имал теорема за всичко. А коя била най-често споменаваната жена сред математиците? Майка му на Коши. Много често я споменавали

Та и аз да спомена (за пореден път) майка му на Джеф Оувъркеш...
Та на въпроса - кастни си кюрито до TIBDataSet и пробвай така:
TIBDataSet(IBQuery).Params[0].Size
Би трябвало да стане. Дано да ти свърши работа!



Тема Re: IBQuery.ParamByName('').Length ???нови [re: andrew_nikoloff]  
АвторDark Dirk (Нерегистриран)
Публикувано14.12.06 09:49



Абе може и да не стане

мамка му.
Това е коментара, който седи пред нашия грозен код:

// Реже текста до дължината, която може да влезе в този параметър
{ това за съжаление не работи, защото Size след първото присвояване AsString има стойност равна
на дължината на стринга :(
(DataSource.DataSet as TIBDataSet).ParamByName('param name').AsString :=
Copy(s, 1, (DataSource.DataSet as TIBDataSet).ParamByName('param name').Size);
}

Но пробвай. Ние използваме версия на IBX X.03. Следващата беше много бъгава и строши проекта и престанахме да update-ваме IBX. Мислим някой ден да мигрираме към FIBPlus.



Тема Re: IBQuery.ParamByName('').Length ???нови [re: andrew_nikoloff]  
АвторEFEX (Нерегистриран)
Публикувано14.12.06 09:49



Това с кастването стана и изглежда много елегантно НО (естествено има винаги едно НО) за съжаление минава само веднъж защото при ExecSQL Size се нулира и за следващите йок!!!



пробвах даже да Prepare-вам всеки път но не помага !!!???!!!

IBQInsert.ParamByName('ADDRESS').AsString :=
Copy(IBQRead.FieldByName('ADRES').AsString,1,
TIBDataSet(IBQInsert).ParamByName('ADDRESS').Size);



Тема Re: IBQuery.ParamByName('').Length ???нови [re: Dark Dirk]  
Автор andrew_nikoloff (bugbuster)
Публикувано14.12.06 10:01



Мда... Още една причина да спомена майка му на Джеф


Ние сме с Х.04. Има няколко дребни бъгчета, ама си ги знаем и не ни създават проблеми. Но щом вие сте имали - кофти
FIBPlus разбира се е много по-добре от IBX, ама лошото е, че е малко скъпичък ($1600) и нещо не виждам смисъл да мигрираме към него, след като IBX-а си ни върши работа.
Аз наистина го пробвах само веднъж това. Ама като не ще с добро - дайте да обърнем дебелия край на тоягата Какво ще стане, ако "пробно" преди туй нещо си запази човек заявката, изтрие SQL пропъртито и му върне пак старата заявка? Няма ли пак да си ги инициализира? Честно казано малко ме мързи да пробвам. В момента само за топло кафенце си мисля
Кажете после ако това закърпва нещата!
Айде успех!



Тема Re: IBQuery.ParamByName('').Length ???нови [re: andrew_nikoloff]  
АвторDark Dirk (Нерегистриран)
Публикувано14.12.06 10:05



FIBPlus за България струва:

Лицензия FIBPlus Single (1 копие) 477.43 лева (за 1 бройка)
Лицензия FIBPlus Single (2-3 копия) 430.70 лева (за 1 бройка)
Лицензия FIBPlus Single (4-5 копия) 381.94 лева (за 1 бройка)
Лицензия FIBPlus Site License (неограничено количество копия) 2 539.50 лева (за 1 бройка)





Тема Re: IBQuery.ParamByName('').Length ???нови [re: andrew_nikoloff]  
АвторEFEX (Нерегистриран)
Публикувано14.12.06 10:41



Вкарах инициализациата на SQL.Text в while цикъла с който въртя записите и стана.Все още незнам как ще се отрази на скороста.. но предполагам че доста ще се отрази като се има впредвид че всеки Exec ще Prepare-ва.





Тема Re: IBQuery.ParamByName('').Length ???нови [re: Dark Dirk]  
Автор andrew_nikoloff (bugbuster)
Публикувано14.12.06 10:45



Ами а де! 2539.50 лева да не са малко?

Не че не се изплащат, ама в случая на нас ще ни отнеме много повече ресурс миграцията към FIB-а, отколкото самата му цена



Тема Re: IBQuery.ParamByName('').Length ???нови [re: andrew_nikoloff]  
Автор Dark_Dirk (^)
Публикувано14.12.06 10:47



Прав си

. То и ние затова ползваме IBX-a.




Всички темиСледваща тема*Кратък преглед
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2024 Dir.bg Всички права запазени.