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

Вниз

Трех звенные приожения, что я сделал не так.....???   Найти похожие ветки 

 
Term ©   (2004-04-07 12:19) [0]

Метод сервера:
procedure TCombat.Registration(const login, passw, style, R_Name,
 R_Fio: WideString; R_Age: Integer; const Storona, Klan, City: WideString;
 out Result: OleVariant);
begin
Login1.Close;
Login1.SQL.Clear;
Login1.SQL.Add("select * from REG_GAMER(:Log_in, :Passw, :stl, :R_Name, :R_FIO, :R_Age, :Storon, :Kln,:Cty)");
Login1.ParamByName("Log_in").AsString:=Login;
Login1.ParamByName("Passw").AsString:=Passw;
Login1.ParamByName("stl").AsString:=style;
Login1.ParamByName("R_Name").AsString:=R_Name;
Login1.ParamByName("R_FIO").AsString:=R_FIO;
Login1.ParamByName("R_Age").AsInteger:=R_Age;
Login1.ParamByName("Storon").AsString:=Storona;
Login1.ParamByName("Kln").AsString:=Klan;
Login1.ParamByName("Cty").AsString:=City;
Login1.Open;
Result:=For_Login.Data;
end;


на клиенте вызываю так:
       DataModule1.SocketConnection1.AppServer.Registration(login,
                                                    passw,
                                                    style,
                                                    R_Name,
                                                    R_Fio,
                                                    R_Age,
                                                    Storona,
                                                    Klan,
                                                    City,
                                                    result);


REG_GAMER это ХП которая осуществляет вставку в три связанные таблицы.
Только она почемуто вставляет сразу 3!!! записи, что это такое и что сделал не так, вроде всё элементарно как в книжках...


 
Term ©   (2004-04-07 12:29) [1]

ну ктонить..... а то я чтото не догоняю


 
Term ©   (2004-04-07 12:36) [2]

народ отзовитесь


 
Polevi ©   (2004-04-07 12:39) [3]

код ХП


 
Term ©   (2004-04-07 12:48) [4]

CREATE PROCEDURE REG_GAMER (
   LOG_IN VARCHAR(30) CHARACTER SET NONE,
   PASSW VARCHAR(15) CHARACTER SET NONE,
   STL VARCHAR(15) CHARACTER SET NONE,
   R_NAME VARCHAR(20) CHARACTER SET NONE,
   R_FIO VARCHAR(20) CHARACTER SET NONE,
   R_AGE INTEGER,
   STORON VARCHAR(4) CHARACTER SET NONE,
   KLN VARCHAR(30) CHARACTER SET NONE,
   CTY VARCHAR(30) CHARACTER SET NONE)
RETURNS (
   RES VARCHAR(31) CHARACTER SET NONE)
AS
DECLARE VARIABLE LOGIN1 VARCHAR(15);
begin
 /* Procedure Text */

   insert into users(user_login,user_password)
              values(:log_in, :passw);

   insert into gamers (login, style, life, life_predel, storona, klan, city)
                values(:log_in, :stl,20,20,:storon,:kln,:cty);

   insert into anketa (login, real_name, real_fio, real_age)
                values(:log_in,:r_name, :r_fio, :r_age);

   RES="успешно";
   suspend;
end

вот код ХП но в нём вроде ничего криминального


 
Digitman ©   (2004-04-07 13:35) [5]

что-то дурь какая-то ...
запрос на модификацию НД, а оформлен с какого-то перепугу как select-запрос ..

зачем эта проктология понадобилась ?


 
Term ©   (2004-04-07 15:34) [6]

эта проктология :))))))))) точнее заднепроходный инжиринг :)))

потомучто просто часть кода выкинул, первоначально процедурка проверяла логин и выдавала результат, т.е. добавила, или типа такой логин уже есть, поэтому и оформленно как селективный запрос. НО т.к. результатом даже успешной вставки выдавалась сообщение что такой юзер есть, то соотв. всё выкинул оставил только то что вставляет записи, что бы увидеть что творится при вызове. А творилось то что процедура почемуто запускалась 3 раза, соотв. в базе оказывалось 3 одинаковых записи....
вот я и спрашиваю каковы могут быть причины.


 
Term ©   (2004-04-07 15:59) [7]

к тому же вопрос в общем то не к ХП, а про её вызов...


 
Term ©   (2004-04-07 16:11) [8]

кто нить что нить скажет..... или хоть что нить почитать что нить именно по MIDAS посоветуете, а то тонкостей много, а инфы мало...


 
Digitman ©   (2004-04-07 16:27) [9]

нет, как это "вопрос в общем то не к ХП" ? у тебя ж в ХП запросы на вставку в таблицы ? а ну как какие-то таблицы имеют триггеры на вставку ? и в них фигурирует вставка в связанные в данном контексте таблицы ? ты ж молчишь об этом как партизан ...


> первоначально процедурка проверяла логин и выдавала результат


ты не ответил на вопрос, и мне непонятно:

- почему ХП реализована как селективная (см. suspend) ?

- на кой шут в ней строчка RES="успешно", если и так понятно, что ежели ХП в ходе работы не вызвала исключения, то операция прошла гарантированно успешно; зачем вообще ХП возвращает совершенно бестолковый и однозначный результат ?

- почему не использована модифицирующая ХП, а на кл.стороне, соотв-но, не использован метод TStoredProc.ExecSQL ?

- почему я вижу TStoredProc.Open, но не вижу TStoredProc.Close ?

- почему нет упоминания о контексте вызова метода AppServer.Registration() ? где. в какой момент времени это происходит ?


 
sniknik ©   (2004-04-07 16:27) [10]

MIDAS тут не при чем скорее всего, а вот вызов очень даже может быть...
проверить же легко
поменяй "select * from" на "exec" (или чего там у тебя за сервер, по нему в описании)
и Login1.Open; на Login1.ExecSQL;
или сильно ломает?


 
Term ©   (2004-04-07 16:36) [11]

процедура в IBExpert"е отрабатывает нормально...


 
Digitman ©   (2004-04-07 16:41) [12]


> процедура в IBExpert"е отрабатывает нормально


значит, клиент три раза к ряду вызывает метод апп-сервера
третьего не дано, чудес на свете не бывает


 
Term ©   (2004-04-07 16:46) [13]

тригеров в ней на встаку нет...

не использовал TStoredProc т.к. на ibase.ru читал что вроде этот компонент в ibx сильно глючит...

сервер FB 1.0

в остальном буду пробовать.

селективная потомучто, часть кода уже повыкидывал, там предварительно делались некоторые проверки, на предмет наличия определенных записей, и выдавался вердикт, типа успешно, либо такой логин задействоан, просто в процссе разгадывания ошибок, часть кода повыкидывал, а ентото что осталось, но рез-т такой же вставка производится трижды...


 
Term ©   (2004-04-07 16:47) [14]


> значит, клиент три раза к ряду вызывает метод апп-сервера
> третьего не дано, чудес на свете не бывает


вот этого то я понять и не могу т.к. вызов там только ОДИН...
что за наваждение...
буду еще копать


 
sniknik ©   (2004-04-07 16:55) [15]

в процедуре Registration точку останова поставь под отладчиком, после законектся с клиента... и узнаеш точно сколько их на самом деле (вызовов).


 
Digitman ©   (2004-04-07 17:01) [16]


> селективная потомучто


селективная ХП оправдана только тогда, когда ХП может возвращать НД с произвольным кол-вом записей

а по сабжу - см. sniknik ©   (07.04.04 16:55) [15]



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

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

Наверх




Память: 0.49 MB
Время: 0.034 c
3-1080835043
White
2004-04-01 19:57
2004.05.02
Как узнать кол-во записей в запросе програмно?


1-1081762062
Bulgar
2004-04-12 13:27
2004.05.02
Создание компонента в Delphi 6


4-1077743027
Dr.Null
2004-02-26 00:03
2004.05.02
Проблемы с WM_SIZE+SetWindowPos


14-1081278369
Игорь Шевченко
2004-04-06 23:06
2004.05.02
Упражение из книжки Таненбаума (Современные операционные системы)


3-1081239691
V-A-V
2004-04-06 12:21
2004.05.02
Удаления пароля из БД MsAccess





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский