Форум: "Базы";
Текущий архив: 2004.02.06;
Скачать: [xml.tar.bz2];
ВнизЗнатокам FIBPlus 4.8: Что-то проиходит не так, после... Найти похожие ветки
← →
VID (2004-01-11 18:13) [0]...неудачного коннекта к серверу.
А именно ситуация была такая: Дело было в сети на 50 машин. Комп с сервером был выключен. Включили все 50 машин, на них включили мою программу, которая при старте сразу же пытается коннектиться к серверу...
Procedure TDM.StartIBDBConnection;
begin
CanHandleDBErrors:=False;
try
IBDB.DatabaseName := ConnectSetsForm.HOST.Text+":"+ConnectSetsForm.DBPath.Text;
IBDB.UseLoginPrompt := False;
IBDB.ConnectParams.RoleName := "STUDENT";
IBDB.ConnectParams.UserName := ConnectSetsForm.Login.Text;
IBDB.ConnectParams.Password := ConnectSetsForm.Password.text;
IBDB.ConnectParams.CharSet := "WIN1251";
IBDB.SQLDialect := 3;
IBDB.Open;
except
CanHandleDBErrors:=True;
try Form1.SetConnectStat(ctBadSettings); except end;
end;
end;
Но так как сервер был выключен, то на экране появляется надпись "Проверьте настройки соединения..." - как результат работы Form1.SetConnectStat(ctBadSettings);
Включили сервер. И НЕ ПЕРЕЗАПУСКАЯ клиентов, снова попытались присоединиться к серверу, (ну там есть кнопка, типа "Повторить попытку соединения" - появляется при неудачном коннекте). Соединение состоялось. Вроде всё нормально.
Прога работает. Но через минут 10-15 НА ВСЕХ компах стал появляться глюк, а именно: не выполнялся UPDATE-запрос!
Т.е. для некоторых записей выполнялся, а для некоторых нет!
ЯВНЫХ ПРИЧИН, типа ограничений каких то в триггерах базы. или ещё чего то не было. Этот Update-запрос должен был выполняться! но он не выполнялся...
Function TDM.UpdateTestingCard:Boolean;
Var S:String;
Begin
Result := False;
IF not AdvancedTestingInfo.IsInfoActual then exit;
IF not CheckDBConnect(False) then exit;
try
S:="SELECT OUT_ISOK FROM STUDENT_UPDATETESTINGCARD ("+IntToStr(AdvancedTestingInfo.TestingCardID)+", "+IntToStr(AdvancedTestingInfo.Percents)+", "+FloatToStr(AdvancedTestingInfo.Mark)+", "+IntToStr(AdvancedTestingInfo.SecondsCount)+","+IntToStr(BoolToInt(AdvancedTestingInfo.DataRestored))+")";
With CreateQ(IBDB, S) do
try
Transaction := Transaction2;
ExecQuery;
Result := FieldByName["OUT_ISOK"].AsInteger = 1;
Transaction.Commit;
finally
Free;
end;
except end;
end;
...посмотрим на ХП STUDENT_UPDATETESTINGCARD...
CREATE PROCEDURE STUDENT_UPDATETESTINGCARD (
IN_ID INTEGER,
IN_PERCENTS INTEGER,
IN_MARK DOUBLE PRECISION,
IN_SECONDSCOUNT INTEGER,
IN_ISRESTORED INTEGER)
RETURNS (
OUT_ISOK INTEGER)
AS
DECLARE VARIABLE STATE INTEGER;
begin
OUT_ISOK = 0;
IF (:IN_ID is null) THEN exit;
SELECT "STATE"
FROM TESTINGCARD
WHERE "ID"=:IN_ID
INTO :STATE;
IF (:STATE not in (0,1)) then Exit;
UPDATE TESTINGCARD
SET "PERCENTS"=:IN_PERCENTS,
"MARK"=:IN_MARK,
"SECONDSCOUNT"=:IN_SECONDSCOUNT,
"ISRESTORED"=:IN_ISRESTORED
WHERE "ID"=:IN_ID;
OUT_ISOK = 1;
suspend;
END
Вот... так вот данный глюк совершенно не даёт о себе знать, если при старте клиента сервер был уже запущен, и коннект проиходит с первого раза без проблем.
Люди, что это за глюк ? Я не могу понять...
← →
VID (2004-01-13 01:39) [1]Блин, ну всегда я умудряюсь здесь задать такой вопрос, на который как правило никто не знает ответа...
← →
Vemer (2004-01-13 02:21) [2]Тупо но эффективно - вырубай прогу при неудачном коннекте.
← →
Johnmen (2004-01-13 09:23) [3]>VID © (13.01.04 01:39)
Не совсем так... Просто всем влом читать твой код. И тем более в него вникать...:)
А если на пальцах, то такого не может быть.
← →
VID (2004-01-14 00:20) [4]To Johnmen: но как то ведь это происходит
← →
Sergey_Masloff (2004-01-14 06:28) [5]VID © (14.01.04 00:20) [4]
>To Johnmen: но как то ведь это происходит
чудес не бывает - это ошибки. И они не связаны (или связаны косвенно) с ситуацией которуюты описал.
← →
VID (2004-01-15 18:15) [6]чёрт побери фигня же получается...
вечно какие то сранные проблемы появляются.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.02.06;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.027 c