БД (Delphi)

Andrey M
Администратор
Администратор
Аватара
Andrey M
Администратор
Администратор
Репутация: 0
Сообщения: 2345
С нами: 6 лет 9 месяцев
Откуда: Воронеж
ICQ Сайт Skype

Re: БД (Delphi)

Сообщение #281 Andrey » 14.04.2012, 17:50

Проверку делать не обязательно, если точно известно что при запуске соединение произошло. Это относится только к MS Access, для более серьёзных проверка требуется.

Maximus M
Автор темы, Супермодератор
Супермодератор
Аватара
Maximus M
Автор темы, Супермодератор
Супермодератор
Репутация: 0
Сообщения: 1507
С нами: 6 лет 9 месяцев
Откуда: Воронеж
ICQ Сайт

Re: БД (Delphi)

Сообщение #282 Maximus » 14.04.2012, 17:52

Ясно.

Maximus M
Автор темы, Супермодератор
Супермодератор
Аватара
Maximus M
Автор темы, Супермодератор
Супермодератор
Репутация: 0
Сообщения: 1507
С нами: 6 лет 9 месяцев
Откуда: Воронеж
ICQ Сайт

Re: БД (Delphi)

Сообщение #283 Maximus » 14.04.2012, 18:44

Код выполняется, поле rank увеличивается, но в тоже время срабатывает исключение.
Выполнение кода обрывается на строке 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 M
Администратор
Администратор
Аватара
Andrey M
Администратор
Администратор
Репутация: 0
Сообщения: 2345
С нами: 6 лет 9 месяцев
Откуда: Воронеж
ICQ Сайт Skype

Re: БД (Delphi)

Сообщение #284 Andrey » 14.04.2012, 18:55

1. Такие конструкции нормально работают в Access? А то когда говорил про такой способ инкремента не учитывал различные особенности этой БД.

Код: Выделить всё

rank=rank+1

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;

Что в delphi делает printf? Эта команда есть во многих языках, но здесь не помню.

Maximus M
Автор темы, Супермодератор
Супермодератор
Аватара
Maximus M
Автор темы, Супермодератор
Супермодератор
Репутация: 0
Сообщения: 1507
С нами: 6 лет 9 месяцев
Откуда: Воронеж
ICQ Сайт

Re: БД (Delphi)

Сообщение #285 Maximus » 14.04.2012, 19:08

Andrey писал(а):1. Такие конструкции нормально работают в Access? А то когда говорил про такой способ инкремента не учитывал различные особенности этой БД.

Код: Выделить всё

rank=rank+1
Ну судя по тому что значение изменяется, то работает.
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;
В s есть строка. С таким вариантом всё тоже самое, за исключением того, что значение поля не увеличивается.
Andrey писал(а):Что в delphi делает printf? Эта команда есть во многих языках, но здесь не помню.
Это моя процедура по логированию ошибок. Кстати почему-то print не захотела добавлять, как буд-то уже есть. :D

Andrey M
Администратор
Администратор
Аватара
Andrey M
Администратор
Администратор
Репутация: 0
Сообщения: 2345
С нами: 6 лет 9 месяцев
Откуда: Воронеж
ICQ Сайт Skype

Re: БД (Delphi)

Сообщение #286 Andrey » 14.04.2012, 19:15

А если Form1.ADOQuery1.Active:=True; заменить на Form1.ADOQuery1.Open;? Хотя если ошибка раньше то не поможет.
Maximus писал(а):Это моя процедура по логированию ошибок. Кстати почему-то print не захотела добавлять, как буд-то уже есть
print есть у формы, поэтому и не добавила. Спросил только потому что первое что увидел в том фрагменте кода - printf, подумал что ты решил перейти с delphi на си. :D

Maximus M
Автор темы, Супермодератор
Супермодератор
Аватара
Maximus M
Автор темы, Супермодератор
Супермодератор
Репутация: 0
Сообщения: 1507
С нами: 6 лет 9 месяцев
Откуда: Воронеж
ICQ Сайт

Re: БД (Delphi)

Сообщение #287 Maximus » 14.04.2012, 19:46

Andrey писал(а):А если Form1.ADOQuery1.Active:=True; заменить на Form1.ADOQuery1.Open;? Хотя если ошибка раньше то не поможет.
Form1.ADOQuery1.Open; не помог.
Andrey писал(а):
Maximus писал(а):Это моя процедура по логированию ошибок. Кстати почему-то print не захотела добавлять, как буд-то уже есть
print есть у формы, поэтому и не добавила. Спросил только потому что первое что увидел в том фрагменте кода - printf, подумал что ты решил перейти с delphi на си. :D
Плавный переход :D

Andrey M
Администратор
Администратор
Аватара
Andrey M
Администратор
Администратор
Репутация: 0
Сообщения: 2345
С нами: 6 лет 9 месяцев
Откуда: Воронеж
ICQ Сайт Skype

Re: БД (Delphi)

Сообщение #288 Andrey » 14.04.2012, 19:49

А какой текст исключения? Код выполняется как надо и всегда?
Maximus писал(а):Плавный переход :D
Если вдруг чем-то си понравится, учитывай что он сложнее.

Maximus M
Автор темы, Супермодератор
Супермодератор
Аватара
Maximus M
Автор темы, Супермодератор
Супермодератор
Репутация: 0
Сообщения: 1507
С нами: 6 лет 9 месяцев
Откуда: Воронеж
ICQ Сайт

Re: БД (Delphi)

Сообщение #289 Maximus » 14.04.2012, 19:59

Andrey писал(а):А какой текст исключения? Код выполняется как надо и всегда?
Как бы его посмотреть, автоматически никаких окон не появляется с ошибками. Плагин просто падает, если убрать try except
Что значит выполняется как надо? Выполняется ведь только часть и данные не обновляются в БД, если конечно не использовать ADOQuery1.Parameters.ParamByName.
Andrey писал(а):Если вдруг чем-то си понравится, учитывай что он сложнее.
Само собой :D
Просто привык к синтаксису си, скрипты в САМП именно на на нём, да и с ява знаком немного.

Andrey M
Администратор
Администратор
Аватара
Andrey M
Администратор
Администратор
Репутация: 0
Сообщения: 2345
С нами: 6 лет 9 месяцев
Откуда: Воронеж
ICQ Сайт Skype

Re: БД (Delphi)

Сообщение #290 Andrey » 14.04.2012, 20:03

Maximus писал(а):Как бы его посмотреть, автоматически никаких окон не появляется с ошибками.
Режим отладки. Тогда появится окно с сообщением.
Maximus писал(а): Выполняется ведь только часть и данные не обновляются в БД
Тогда как ты понял что rank увеличивается?
Maximus писал(а):Просто привык к синтаксису си, скрипты в САМП именно на на нём, да и с ява знаком немного.
Все они чем-то похожи, а си, ява, C#, php особенно сильно близки.

Maximus M
Автор темы, Супермодератор
Супермодератор
Аватара
Maximus M
Автор темы, Супермодератор
Супермодератор
Репутация: 0
Сообщения: 1507
С нами: 6 лет 9 месяцев
Откуда: Воронеж
ICQ Сайт

Re: БД (Delphi)

Сообщение #291 Maximus » 14.04.2012, 20:05

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 M
Автор темы, Супермодератор
Супермодератор
Аватара
Maximus M
Автор темы, Супермодератор
Супермодератор
Репутация: 0
Сообщения: 1507
С нами: 6 лет 9 месяцев
Откуда: Воронеж
ICQ Сайт

Re: БД (Delphi)

Сообщение #292 Maximus » 14.04.2012, 20:07

Andrey писал(а):Режим отладки. Тогда появится окно с сообщением.
Я уже забыл как его для чата настроить :D

Andrey M
Администратор
Администратор
Аватара
Andrey M
Администратор
Администратор
Репутация: 0
Сообщения: 2345
С нами: 6 лет 9 месяцев
Откуда: Воронеж
ICQ Сайт Skype

Re: БД (Delphi)

Сообщение #293 Andrey » 14.04.2012, 20:11

Ну оставляем первый вариант. Я так и не понял, в данном случае увеличивается rank, записывается в БД и вылетает исключение? Или не так?
Я уже забыл как его для чата настроить
Минут через 20 напишу, когда виртуалку с delphi восстановлю, а то она 5 минут назад перешла в режим бесконечной перезагрузки.

Maximus M
Автор темы, Супермодератор
Супермодератор
Аватара
Maximus M
Автор темы, Супермодератор
Супермодератор
Репутация: 0
Сообщения: 1507
С нами: 6 лет 9 месяцев
Откуда: Воронеж
ICQ Сайт

Re: БД (Delphi)

Сообщение #294 Maximus » 14.04.2012, 20:13

В первом случае запись в БД происходит, но исключение всё равно срабатывает, во втором случае запись в БД не происходит и так же срабатывает исключение.

Andrey M
Администратор
Администратор
Аватара
Andrey M
Администратор
Администратор
Репутация: 0
Сообщения: 2345
С нами: 6 лет 9 месяцев
Откуда: Воронеж
ICQ Сайт Skype

Re: БД (Delphi)

Сообщение #295 Andrey » 14.04.2012, 20:14

Когда напишу как отладку сделать, посмотришь что за исключение. Пока его причину понять сложно.

Andrey M
Администратор
Администратор
Аватара
Andrey M
Администратор
Администратор
Репутация: 0
Сообщения: 2345
С нами: 6 лет 9 месяцев
Откуда: Воронеж
ICQ Сайт Skype

Re: БД (Delphi)

Сообщение #296 Andrey » 14.04.2012, 20:41

Включение отладки.
Меню Project - Options. Слева выбрать Delphi Compiler. В пункте Output Diectory (желательно во все 3 пункта) записать путь до того места где будет лежать файл плагина. Например

Код: Выделить всё

C:\Program Files (x86)\CommFort_server\Plugins\

Затем слева выбрать "Debugger". Пункт Host Application - исполняемый файл коммфорта

Код: Выделить всё

C:\Program Files (x86)\CommFort_server\CommFort_server.exe

Пункт Working Directory - папка с коммфортом

Код: Выделить всё

C:\Program Files (x86)\CommFort_server

Внимание! {$LIBVERSION 'cfplug'} может исчезнуть, надо будет восстановить.

Maximus M
Автор темы, Супермодератор
Супермодератор
Аватара
Maximus M
Автор темы, Супермодератор
Супермодератор
Репутация: 0
Сообщения: 1507
С нами: 6 лет 9 месяцев
Откуда: Воронеж
ICQ Сайт

Re: БД (Delphi)

Сообщение #297 Maximus » 14.04.2012, 21:01

Никаких сообщений. Только при первом запуске в режиме отладки было очень много сообщений с кодами ошибок, но при самом обращении ничего. А сейчас запускаю, так и при запуске никаких ошибок.

Andrey M
Администратор
Администратор
Аватара
Andrey M
Администратор
Администратор
Репутация: 0
Сообщения: 2345
С нами: 6 лет 9 месяцев
Откуда: Воронеж
ICQ Сайт Skype

Re: БД (Delphi)

Сообщение #298 Andrey » 14.04.2012, 21:03

То есть исключение срабатывает но подробностей нет?

Maximus M
Автор темы, Супермодератор
Супермодератор
Аватара
Maximus M
Автор темы, Супермодератор
Супермодератор
Репутация: 0
Сообщения: 1507
С нами: 6 лет 9 месяцев
Откуда: Воронеж
ICQ Сайт

Re: БД (Delphi)

Сообщение #299 Maximus » 14.04.2012, 21:08

Нету. Если убрать обработку исключений тоже ничего. Чтобы остановить запуск просто закрываем сервер или нужно как-то по-другому?

Andrey M
Администратор
Администратор
Аватара
Andrey M
Администратор
Администратор
Репутация: 0
Сообщения: 2345
С нами: 6 лет 9 месяцев
Откуда: Воронеж
ICQ Сайт Skype

Re: БД (Delphi)

Сообщение #300 Andrey » 14.04.2012, 21:10

Закрыть сервер или нажать кнопку остановки. Только вот странно почему не показыается, обычно о любом исключении сообщается.


Вернуться в «Delphi/Pascal»

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 3 гостя