1 (edited by savage 2014-09-24 09:22:37)

Topic: [Решено] Проверка базы на соответствие даты и курса валюты

День добрый.
Есть такая проблема:
1. есть таблица с курсами и форма ввода. В форме ввода пользователь забивает дату, сумму и вид валюты
2. необходимо проверить справочник курсов валют на конкретную дату и вид валюты.

Я написал такой скрипт, но у меня идет ругань на incompatible types .....

procedure frmAddPay_bPayOk_OnClick (Sender: string; var Cancel: boolean);
var
   val: string;

begin
     // делаем SQL запрос, для проверки, есть ли такая валюта на такую дату в базе
     val := VarToStr( SQLExecute('SELECT count(id) FROM CurrancyEx WHERE (date = ''' + frmAddPay.DateTimePicker1.Date + ''') AND (curEx_name = ''' + frmAddPay.ComboBox1.Text + ''');') );
     if val <> '0' then    // если результат не равен нулю, значит такая валюта на такую дату в базе есть
       begin
          MessageDlg('В базе есть такой курс на данную дату!', mtError, mbOk, 0); // сообщение если дата и курс есть в базе
       end else    MessageDlg('В базе нет курса на данную дату. Введите!', mtError, mbOk, 0); // сообщение если нет

end;

Re: [Решено] Проверка базы на соответствие даты и курса валюты

Попробуйте так


procedure frmAddPay_bPayOk_OnClick (Sender: string; var Cancel: boolean);
var
   val: string;
begin
     // делаем SQL запрос, для проверки, есть ли такая валюта на такую дату в базе
     val := SQLExecute('SELECT count(id) FROM CurrancyEx WHERE (date = ''' + FormatDateTime('yyyy-MM-DD 00:00:00.000', frmAddPay.DateTimePicker1.Date) + ''') AND (curEx_name = ''' + frmAddPay.ComboBox1.Text + ''');');
     if val <> '0' then    // если результат не равен нулю, значит такая валюта на такую дату в базе есть
       begin
          MessageDlg('В базе есть такой курс на данную дату!', mtError, mbOk, 0); // сообщение если дата и курс есть в базе
       end else    MessageDlg('В базе нет курса на данную дату. Введите!', mtError, mbOk, 0); // сообщение если нет

end;
Dmitry.

3 (edited by savage 2014-09-23 19:28:59)

Re: [Решено] Проверка базы на соответствие даты и курса валюты

DriveSoft, сделал (с небольшой корректировкой - через VarToStr) код:

procedure frmAddPay_bPayOk_OnClick (Sender: string; var Cancel: boolean);
var
   val: string;
begin
     // делаем SQL запрос, для проверки, есть ли такая валюта на такую дату в базе
     val := VarToStr(SQLExecute('SELECT count(id) FROM CurrancyEx WHERE (date = ''' + FormatDateTime('yyyy-MM-DD 00:00:00.000', frmAddPay.DateTimePicker1.Date) + ''') AND (curEx_name = ''' + frmAddPay.ComboBox1.Text + ''');') );
       if val <> '0' then    // если результат не равен нулю, значит такая валюта на такую дату в базе есть
       begin
          MessageDlg('В базе есть такой курс на данную дату!', mtError, mbOk, 0); // сообщение если дата и курс есть в базе
       end else    MessageDlg('В базе нет курса на данную дату. Введите!', mtError, mbOk, 0); // сообщение если нет

end;

но скрипт отрабатывает некорректно:
1. сначала ругается на отсутствие (no such colomn) curEx_name, хотя такое поле есть в таблице CurrancyEx
2. потом, не смотря на отсутствие в базе курса на 23 сентября (я ввел в таблицу CurrancyEx только данные только на 22 сентября), выдает месседж, что "В базе есть такой курс на данную дату"
3. сохраняет введенные данные в таблицу - единственное, что было предусмотрено на данный момент
Что я делаю не так?

Попробовал изменить код с учетом:
FormatDateTime('yyyy-MM-DD 00:00:00.000', frmAddPay.DateTimePicker1.DateTime)
результат -  см. выше

PS на всякий прикрепил проект (1 этап)

Post's attachments

Attachment icon MyMarketing.zip 335.75 kb, 458 downloads since 2014-09-23 

Re: [Решено] Проверка базы на соответствие даты и курса валюты

1. Вы попытались обратиться к вычисляемому полю, его на самом деле не существует, я изменил запрос с учетом этого
2. Проверил, после изменения запроса не смог добиться этой ошибки.
3. Так же не заметил такого.


проект приложил к сообщение, проверьте пожалуйста.

Post's attachments

Attachment icon MyMarketing.zip 13.71 kb, 477 downloads since 2014-09-24 

Dmitry.

5 (edited by savage 2014-09-24 09:22:07)

Re: [Решено] Проверка базы на соответствие даты и курса валюты

DriveSoft, все работает.
Я так понял, что на вычисляемое поле ссылаться в скриптах бесполезно? Если это так, то неплохо было бы в справке об этом написать для всех пользователей.

Еще раз спасибо за помощь!