Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.08.26;
Скачать: [xml.tar.bz2];

Вниз

UpdateSQL & StoredProc   Найти похожие ветки 

 
Пушкин   (2002-08-06 16:41) [0]

Доброго времени, господа! Расскажите если победили связку в cабже! По старинке (query+dbgrid+updatesql) все работало, после замены query на storedproc все работать естественно перестало. Я чую что нужно как-то хитро подкрутить свойства updatesql. Но как?
Сенкс за напругу, если кто знает!
Пушкин.


 
MOA   (2002-08-06 18:05) [1]

Пушкин © (06.08.02 16:41)
Правда, на MSSQL, но я думаю без разницы. Если Вы используете BDE, то
1. Присоедините к TStoredProc TUpdateSQL как обычно;
2. Запишите в TUpdateSQL SQL-операторы, которыми Вы хотите вставлять, удалять или модифицировать записи. Вручную.
У меня сделано именно так (вот сейчас смотрю) - всё работает уже года 3. Параметры - как обычно. Ещё раз - у меня MSSQL.
Если на ADO - к сожалению (моему) - приходится руками обрабатывать соответствующие события.
Удачи!


 
Пушкин   (2002-08-06 18:17) [2]

МОА, фишка в том, что в свойствах updatesql"я тоже стоят хранимые поцедуры, которые соответственно сохраняют, модифицируют или удаляют данные из таблицы бд. Когда вместо сторедпрок был query то там совпадали имена параметров и имена полей в таблице и все работало. Так что мне кажется нужно тока правильно переписать свойства updatesql. А вот как? Я вот уже целый день как муха на стекле и нифига :( ......


 
MOA   (2002-08-06 20:37) [3]

Пушкин © (06.08.02 18:17)
Просто "выдираю" из моей рабочей программульки:
TStoredProc : dbo.up_LSFiler
Params:
@Kategor
@ID_Region
@ID_StrHous
@LS
@ID_TypClient
@Note
@Name
@Famil
@Flag

TUpdateSQL:
DeleteSQL:
dbo.DeleteLS @ID_Client=:OLD_ID_Client
InsertSQL:
INSERT INTO Clients (InRegion, KategorClient, LS, DateEnd, Note)
VALUES (:InRegion, :LS, :DateEnd, :Note)
UpdateSQL:
UPDATE Clients
SET
InRegion=:InRegion,
KategorClient=:KategorClient,
LS=:LS,
DateEnd=:DateEnd,
Note=:Note
WHERE
ID_Client=:OLD_ID_Client.
Видно, что параметры TUpdateSQL не обязаны быть параметрами процедуры.
Удачи!


 
Пушкин   (2002-08-07 10:24) [4]

МОА, твой код не особо помог :). Объясняю :)). В Query отрабатывал селект и естественно, возвращались поля, с названиями как в таблице, например id_pointer,number,date etc. А в StoredProc возвращаются поля с какими-то дурацкими именами, буквально (expression),(expression)_1,(expression)_2 и тд. В UpdateSQL в связке с query (в соответствующих свойствах) было написано: execute procedure storedproc_name(:id_pointer,:number,:date,:). А после замены query на Stroredproc получается лажа, то есть ничего не работает, хотя вместо полей я пробовал писать и дурацие имена полей сторедпрок. У тебя все-таки немного подругому, ты же напрямую пишешь!


 
MOA   (2002-08-07 13:19) [5]

Предположим, что у нас возникла необходимость использовать TStoredProc в связке с TUpdateSQL. Это значит:
1. Процедура возвращает некий набор данных, часть полей которого (не обязательно все) мы показываем пользователю
2. Мы даём пользователю возможность изменять, удалять или добавлять записи
3. Чтобы изменить или удалить запись, необходимо, чтобы процедура возвращала:
а) поля, на основании которых можно однозначно идентифицировать данные в таблице(ах) базы;
б) поля, которые пользователь может менять.
в) как именно эти поля назвала процедура - совершенно неважно.
вот названия этих полей мы и записываем во фразах UpdateSQL и DeleteSQL, предваряя их :, в купе с процедурой (например, dbo.DeleteLS - это процедура) или UPDATE (DELETE)
4. Чтобы пользователь мог добавлять данные, пишем во фразе InsertSQL вызов процедуры или INSERT с именами полей, позволяющими однозначно идентифицировать нашу запись (записи) - а эти поля нам обязана возвратить наша процедура.
Т.е. в любом случае у нас все есть.

Резюмируя - если есть необходимость в TUpdateSQL, значит, все необходимые поля процедура нам возратила, и названия этих полей и надо писать в выражениях TUpdateSQL.
Названия полей в процедуре не обязаны совпадать с названиями полей в базе, например
INSERT INTO tablica Pole1, Pole2 VALUES (:Expression1, :Expression2)
Pole1 и Pole2 - поля таблицы, Expression1 и Expression2 - поля, возвращенные процедурой.
Что касается странных названий полей - с Infomix не знаком, к сожалению, а, например, Interbase и MSSQL позволяют назвать поля, возвращаемые в рекордсете процедуры как угодно. Наверное, Informix не хуже ;).
Удачи!


 
MOA   (2002-08-07 13:24) [6]

С INSERT я погорячился - конечно, могут быть и разнообразные автоматически формируемые идентификаторы - генераторы, автоинкременты и т.д., которые и будут идентифицировать добавленную запись.
Впрочем, это совсем другая песня.
Удачи!



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2002.08.26;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.007 c
3-84904
Zelius
2002-07-26 17:19
2002.08.26
Грабли от MS SQL 2000 в виде MSDE!


1-84966
-=Spike=-
2002-08-15 15:54
2002.08.26
Текстовый файл, запись, поиск строки.


1-85105
npAKtuk
2002-08-14 13:43
2002.08.26
Как передать число после Formatfloat в Excel


14-85177
Schummi
2002-07-30 08:47
2002.08.26
про деньги...


14-85239
RIPer
2002-08-01 14:30
2002.08.26
Винчестер





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский