БД (Delphi)
- Andrey
- Администратор
- Сообщения: 2345
- Зарегистрирован: 02 фев 2012, 11:42
- Откуда: Воронеж
- Контактная информация:
Re: БД (Delphi)
Проверку делать не обязательно, если точно известно что при запуске соединение произошло. Это относится только к MS Access, для более серьёзных проверка требуется.
- Maximus
- Супермодератор
- Сообщения: 1507
- Зарегистрирован: 02 фев 2012, 11:42
- Откуда: Воронеж
- Контактная информация:
Re: БД (Delphi)
Ясно.
- Maximus
- Супермодератор
- Сообщения: 1507
- Зарегистрирован: 02 фев 2012, 11:42
- Откуда: Воронеж
- Контактная информация:
Re: БД (Delphi)
Код выполняется, поле rank увеличивается, но в тоже время срабатывает исключение.
Выполнение кода обрывается на строке Form1.ADOQuery1.Parameters.ParamByName('v').Value:=s;
Form1.ADOQuery1.Active:=True; уже не выполняется.
Из-за чего так?
Выполнение кода обрывается на строке Form1.ADOQuery1.Parameters.ParamByName('v').Value:=s;
Form1.ADOQuery1.Active:=True; уже не выполняется.
Из-за чего так?
Код: Выделить всё
procedure SetPlayerRank(s: ShortString);
begin
try
Form1.ADOQuery1.SQL.Clear;
Form1.ADOQuery1.SQL.Add('UPDATE Score SET rank=rank+1 WHERE name=:v');
Form1.ADOQuery1.Parameters.ParamByName('v').Value:=s;
Form1.ADOQuery1.Active:=True;
except
printf('Ошибка при запросе установления ранга игроку');
end;
end;
- Andrey
- Администратор
- Сообщения: 2345
- Зарегистрирован: 02 фев 2012, 11:42
- Откуда: Воронеж
- Контактная информация:
Re: БД (Delphi)
1. Такие конструкции нормально работают в Access? А то когда говорил про такой способ инкремента не учитывал различные особенности этой БД.
2. В s есть что-то?
Странно то что Form1.ADOQuery1.Active:=True; не выполняется, а rank увеличивается. Без выполнения той команды это невозможно.
Попробуй ещё такой вариант:
Что в delphi делает printf? Эта команда есть во многих языках, но здесь не помню.
Код: Выделить всё
rank=rank+1
Странно то что Form1.ADOQuery1.Active:=True; не выполняется, а rank увеличивается. Без выполнения той команды это невозможно.
Попробуй ещё такой вариант:
Код: Выделить всё
procedure SetPlayerRank(s: ShortString);
begin
try
Form1.ADOQuery1.SQL.Clear;
Form1.ADOQuery1.SQL.Add('UPDATE Score SET rank=rank+1 WHERE name='+s);
Form1.ADOQuery1.Active:=True;
except
printf('Ошибка при запросе установления ранга игроку');
end;
- Maximus
- Супермодератор
- Сообщения: 1507
- Зарегистрирован: 02 фев 2012, 11:42
- Откуда: Воронеж
- Контактная информация:
Re: БД (Delphi)
Ну судя по тому что значение изменяется, то работает.Andrey писал(а):1. Такие конструкции нормально работают в Access? А то когда говорил про такой способ инкремента не учитывал различные особенности этой БД.Код: Выделить всё
rank=rank+1
В s есть строка. С таким вариантом всё тоже самое, за исключением того, что значение поля не увеличивается.Andrey писал(а):2. В s есть что-то?
Странно то что Form1.ADOQuery1.Active:=True; не выполняется, а rank увеличивается. Без выполнения той команды это невозможно.
Попробуй ещё такой вариант:Код: Выделить всё
procedure SetPlayerRank(s: ShortString); begin try Form1.ADOQuery1.SQL.Clear; Form1.ADOQuery1.SQL.Add('UPDATE Score SET rank=rank+1 WHERE name='+s); Form1.ADOQuery1.Active:=True; except printf('Ошибка при запросе установления ранга игроку'); end;
Это моя процедура по логированию ошибок. Кстати почему-то print не захотела добавлять, как буд-то уже есть. :DAndrey писал(а):Что в delphi делает printf? Эта команда есть во многих языках, но здесь не помню.
- Andrey
- Администратор
- Сообщения: 2345
- Зарегистрирован: 02 фев 2012, 11:42
- Откуда: Воронеж
- Контактная информация:
Re: БД (Delphi)
А если Form1.ADOQuery1.Active:=True; заменить на Form1.ADOQuery1.Open;? Хотя если ошибка раньше то не поможет.
print есть у формы, поэтому и не добавила. Спросил только потому что первое что увидел в том фрагменте кода - printf, подумал что ты решил перейти с delphi на си. :DMaximus писал(а):Это моя процедура по логированию ошибок. Кстати почему-то print не захотела добавлять, как буд-то уже есть
- Maximus
- Супермодератор
- Сообщения: 1507
- Зарегистрирован: 02 фев 2012, 11:42
- Откуда: Воронеж
- Контактная информация:
Re: БД (Delphi)
Form1.ADOQuery1.Open; не помог.Andrey писал(а):А если Form1.ADOQuery1.Active:=True; заменить на Form1.ADOQuery1.Open;? Хотя если ошибка раньше то не поможет.
Плавный переход :DAndrey писал(а):print есть у формы, поэтому и не добавила. Спросил только потому что первое что увидел в том фрагменте кода - printf, подумал что ты решил перейти с delphi на си. :DMaximus писал(а):Это моя процедура по логированию ошибок. Кстати почему-то print не захотела добавлять, как буд-то уже есть
- Andrey
- Администратор
- Сообщения: 2345
- Зарегистрирован: 02 фев 2012, 11:42
- Откуда: Воронеж
- Контактная информация:
Re: БД (Delphi)
А какой текст исключения? Код выполняется как надо и всегда?
Если вдруг чем-то си понравится, учитывай что он сложнее.Maximus писал(а):Плавный переход :D
- Maximus
- Супермодератор
- Сообщения: 1507
- Зарегистрирован: 02 фев 2012, 11:42
- Откуда: Воронеж
- Контактная информация:
Re: БД (Delphi)
Как бы его посмотреть, автоматически никаких окон не появляется с ошибками. Плагин просто падает, если убрать try exceptAndrey писал(а):А какой текст исключения? Код выполняется как надо и всегда?
Что значит выполняется как надо? Выполняется ведь только часть и данные не обновляются в БД, если конечно не использовать ADOQuery1.Parameters.ParamByName.
Само собой :DAndrey писал(а): Если вдруг чем-то си понравится, учитывай что он сложнее.
Просто привык к синтаксису си, скрипты в САМП именно на на нём, да и с ява знаком немного.
- Andrey
- Администратор
- Сообщения: 2345
- Зарегистрирован: 02 фев 2012, 11:42
- Откуда: Воронеж
- Контактная информация:
Re: БД (Delphi)
Режим отладки. Тогда появится окно с сообщением.Maximus писал(а): Как бы его посмотреть, автоматически никаких окон не появляется с ошибками.
Тогда как ты понял что rank увеличивается?Maximus писал(а): Выполняется ведь только часть и данные не обновляются в БД
Все они чем-то похожи, а си, ява, C#, php особенно сильно близки.Maximus писал(а):Просто привык к синтаксису си, скрипты в САМП именно на на нём, да и с ява знаком немного.
- Maximus
- Супермодератор
- Сообщения: 1507
- Зарегистрирован: 02 фев 2012, 11:42
- Откуда: Воронеж
- Контактная информация:
Re: БД (Delphi)
rank увеличивается если написать так
и не увеличивается если так
Код: Выделить всё
Form1.ADOQuery1.SQL.Add('UPDATE Score SET rank=rank+1 WHERE name=:v');
Form1.ADOQuery1.Parameters.ParamByName('v').Value:=s;
Form1.ADOQuery1.Active:=True;
Код: Выделить всё
Form1.ADOQuery1.SQL.Add('UPDATE Score SET rank=rank+1 WHERE name='+s);
Form1.ADOQuery1.Active:=True;
- Maximus
- Супермодератор
- Сообщения: 1507
- Зарегистрирован: 02 фев 2012, 11:42
- Откуда: Воронеж
- Контактная информация:
Re: БД (Delphi)
Я уже забыл как его для чата настроить :DAndrey писал(а): Режим отладки. Тогда появится окно с сообщением.
- Andrey
- Администратор
- Сообщения: 2345
- Зарегистрирован: 02 фев 2012, 11:42
- Откуда: Воронеж
- Контактная информация:
Re: БД (Delphi)
Ну оставляем первый вариант. Я так и не понял, в данном случае увеличивается rank, записывается в БД и вылетает исключение? Или не так?
Минут через 20 напишу, когда виртуалку с delphi восстановлю, а то она 5 минут назад перешла в режим бесконечной перезагрузки.Я уже забыл как его для чата настроить
- Maximus
- Супермодератор
- Сообщения: 1507
- Зарегистрирован: 02 фев 2012, 11:42
- Откуда: Воронеж
- Контактная информация:
Re: БД (Delphi)
В первом случае запись в БД происходит, но исключение всё равно срабатывает, во втором случае запись в БД не происходит и так же срабатывает исключение.
- Andrey
- Администратор
- Сообщения: 2345
- Зарегистрирован: 02 фев 2012, 11:42
- Откуда: Воронеж
- Контактная информация:
Re: БД (Delphi)
Когда напишу как отладку сделать, посмотришь что за исключение. Пока его причину понять сложно.
- Andrey
- Администратор
- Сообщения: 2345
- Зарегистрирован: 02 фев 2012, 11:42
- Откуда: Воронеж
- Контактная информация:
Re: БД (Delphi)
Включение отладки.
Меню Project - Options. Слева выбрать Delphi Compiler. В пункте Output Diectory (желательно во все 3 пункта) записать путь до того места где будет лежать файл плагина. Например
Затем слева выбрать "Debugger". Пункт Host Application - исполняемый файл коммфорта
Пункт Working Directory - папка с коммфортом
Внимание! {$LIBVERSION 'cfplug'} может исчезнуть, надо будет восстановить.
Меню Project - Options. Слева выбрать Delphi Compiler. В пункте Output Diectory (желательно во все 3 пункта) записать путь до того места где будет лежать файл плагина. Например
Код: Выделить всё
C:\Program Files (x86)\CommFort_server\Plugins\
Код: Выделить всё
C:\Program Files (x86)\CommFort_server\CommFort_server.exe
Код: Выделить всё
C:\Program Files (x86)\CommFort_server
- Maximus
- Супермодератор
- Сообщения: 1507
- Зарегистрирован: 02 фев 2012, 11:42
- Откуда: Воронеж
- Контактная информация:
Re: БД (Delphi)
Никаких сообщений. Только при первом запуске в режиме отладки было очень много сообщений с кодами ошибок, но при самом обращении ничего. А сейчас запускаю, так и при запуске никаких ошибок.
- Andrey
- Администратор
- Сообщения: 2345
- Зарегистрирован: 02 фев 2012, 11:42
- Откуда: Воронеж
- Контактная информация:
Re: БД (Delphi)
То есть исключение срабатывает но подробностей нет?
- Maximus
- Супермодератор
- Сообщения: 1507
- Зарегистрирован: 02 фев 2012, 11:42
- Откуда: Воронеж
- Контактная информация:
Re: БД (Delphi)
Нету. Если убрать обработку исключений тоже ничего. Чтобы остановить запуск просто закрываем сервер или нужно как-то по-другому?
- Andrey
- Администратор
- Сообщения: 2345
- Зарегистрирован: 02 фев 2012, 11:42
- Откуда: Воронеж
- Контактная информация:
Re: БД (Delphi)
Закрыть сервер или нажать кнопку остановки. Только вот странно почему не показыается, обычно о любом исключении сообщается.