Главная страница
    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
1-85113
MC TOL
2002-08-15 08:54
2002.08.26
New Entry Point... What the f*** is going on?


1-84992
Nazareth
2002-08-15 15:06
2002.08.26
Проблема с TTimeStamp под Delphi 6


14-85238
Anna_
2002-07-30 18:09
2002.08.26
Встречи


8-85133
Янушка
2002-04-19 11:27
2002.08.26
Как осуществить загрузку рисунка на форму, не используя TImage?


1-84948
maxim2
2002-08-15 12:20
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский