1 (edited by tefix 2022-05-07 07:27:20)

Topic: Как сравнить id записи с переменной?

Здравствуйте, товарищи программисты) Помогите пожалуйста с синтаксисом или пинком в нужную сторону)
1. Как правильно записать условие проверки if (SQLExecute('SELECT id FROM FIO where id=i')) > 0?
    (id="i"      id="+i+"      id="'+i+'"    - не работает, выдает ошибку что в таблице нет поля i)
2. Как правильно потом внести в поле таблицы id_Fio эту же переменную i ?


procedure Nalog_BtnUpdateAll_OnClick (Sender: TObject; var Cancel: boolean);
var
  f_min, f_max, i: integer;

begin
    f_min := SQLExecute('SELECT min(id) FROM FIO');       //выбираем первого абонента
    f_max := SQLExecute('SELECT max(id) FROM FIO');     //выбираем последнего абонента

    for i := f_min to f_max do
    begin
       if (SQLExecute('SELECT id FROM FIO where id=i')) > 0   //проверяем существует ли абонент по данному id
        then begin
        //вносим в журнал записи налогов за новый год
        SQLExecute('INSERT INTO ZHYRNAL(data,id_FIO,zemlya,zarplata,dorogi) VALUES ("'+Nalog.DateTime.sqlDate+'","i","'+Nalog.TarifZemlya.sqlValue+'","'+Nalog.TarifZarplata.sqlValue+'","'+Nalog.TarifDorogi.sqlValue+'")');
       end;
    end;

end;



Подскажите пожалуйста какой синтаксис должен быть?

Суть скрипта в следующем: Создать новую запись в таблице "ZHYRNAL" для всех существующих людей из таблицы "FIO"

2 (edited by sibprogsistem 2022-05-07 13:33:51)

Re: Как сравнить id записи с переменной?

integer = целочисленное значение
string = строковое значение 
конвертация значения число в строку IntToStr(i)  строка в число StrToInt('5')

если переменная содержит число

1. Как правильно записать условие проверки if (SQLExecute('SELECT id FROM FIO where id='+IntToStr(i))) > 0?
2. "'+IntToStr(i)+'"
так как запросы в БД делаются строкой..
   
сути не понятна, загрузите Ваш проект

3 (edited by k245 2022-05-07 14:35:39)

Re: Как сравнить id записи с переменной?

Не стоит обработку организовывать через цикл FOR, для получения нужных значений ID используйте запрос и процедуру SQLQuery, которая создает набор данных (экземпляр класса TDataSet)

var
  tmpDataSet: TDataSet;
begin
  SQLQuery('SELECT id FROM FIO',tmpDataSet);
  while not tmpDataSet.EOF do
  begin
    SQLExecute('INSERT INTO ZHYRNAL(data,id_FIO,zemlya,zarplata,dorogi) VALUES 
    ('+Nalog.DateTime.sqlDate+', '+tmpDataSet.FieldByName('id').asString+', '+Nalog.TarifZemlya.sqlValue+','+Nalog.TarifZarplata.sqlValue+','+Nalog.TarifDorogi.sqlValue+')' );
    tmpDataSet.Next;
  end;
  tmpDataSet.Free

Но, если всем нужно добавить одно и то же значение для всех, то это можно сделать одной SQL-командой:

SQLExecute('INSERT INTO ZHYRNAL(data,id_FIO,zemlya,zarplata,dorogi) SELECT '+Nalog.DateTime.sqlDate+', id , '+Nalog.TarifZemlya.sqlValue+','+Nalog.TarifZarplata.sqlValue+','+Nalog.TarifDorogi.sqlValue+' FROM FIO' );
Визуальное программирование: блог и телеграм-канал.

Re: Как сравнить id записи с переменной?

Благодарю. Значения разные добавляются. Я через костыль так сказать решил кое как, посмотрю ваши варианты для более корректного кода.