Topic: Заполнение Грида скриптом
Дмитрий, добрый день!
Очередняа проблема. Суть такова:
Заполняю Грид скриптом, для этого делаю следующее
1. Само собой задаю Гриду столбцы и имена столбцов (тут есть ещё 1 момент, возможно ли вручную задать количество столбцов гриду. Просто по умолчанию у него 6 столбцов, и если в базе столбцов меньше то приходиться удалять лишние, а это не есть гуд, хоть и не критично).
2. Определяю количество записей в базе.
3. Создаю условие, при котором если в базе записей нет вообще, то id первой записи я вписываю 1 без каких либо хитрых манипуляций. Если записи есть, то определяю максимальный id и следующая запись которая вписывается получает значение MAX(id)+1.
4. Запускаю цикл в котором уже по количеству записей в базе создаю строки в Гриде, и вписываю значения строки из базы в Грид.
Вот здесь и появляется проблема. Не знаю каким образом корректно записать значение id из базы в Грид что бы они совпадали.
На данный момент все это выглядит так:
procedure Form1_Button1_OnClick (Sender: string; var Cancel: boolean);
var
s1, s2, s3, s4: string;
r: integer;
begin
IF (Form1.Edit2.Text='') OR (Form1.Edit3.Text='') OR (Form1.DateTimePicker1.Checked=False)
THEN
ShowMessage('Поля пустые')
ELSE
begin
IF SQLExecute('SELECT Count(id) FROM Contracts') < 1
THEN
begin
Form1.CGrid.ClearRows;
s1:= '1';
s2:= ReplaceStr(Form1.Edit3.Text,'"','""');
s3:= ReplaceStr(Form1.Edit2.Text,'"','""');
s4:= ReplaceStr(DateToStr(Form1.DateTimePicker1.DateTime),'"','""');
SQLExecute('INSERT INTO Contracts (id, Number, Date, Customer) VALUES ("'+s1+'","'+s2+'","'+s3+'","'+s4+'")');
UpdateDatabase('Contracts');
FOR r:= 0 TO (SQLExecute('SELECT Count(id) FROM Contracts')-1) DO
begin
Form1.CGrid.AddRow;
Form1.CGrid.Cells[0,r]:= IntToStr(r+1);
Form1.CGrid.Cells[1,r]:= SQLExecute('SELECT Number FROM Contracts WHERE id="'+IntToStr(r+1)+'"');
Form1.CGrid.Cells[2,r]:= SQLExecute('SELECT Date FROM Contracts WHERE id="'+IntToStr(r+1)+'"');
Form1.CGrid.Cells[3,r]:= SQLExecute('SELECT Customer FROM Contracts WHERE id="'+IntToStr(r+1)+'"');
end;
end
ELSE
begin
Form1.CGrid.ClearRows;
s1:= IntToStr(SQLExecute('SELECT Max(id) FROM Contracts')+1);
s2:= ReplaceStr(Form1.Edit3.Text,'"','""');
s3:= ReplaceStr(Form1.Edit2.Text,'"','""');
s4:= ReplaceStr(DateToStr(Form1.DateTimePicker1.DateTime),'"','""');
SQLExecute('INSERT INTO Contracts (id, Number, Date, Customer) VALUES ("'+s1+'","'+s2+'","'+s3+'","'+s4+'")');
UpdateDatabase('Contracts');
FOR r:= 0 TO (SQLExecute('SELECT Count(id) FROM Contracts')-1) DO
begin
Form1.CGrid.AddRow;
Form1.CGrid.Cells[0,r]:= IntToStr(r+1);
Form1.CGrid.Cells[1,r]:= SQLExecute('SELECT Number FROM Contracts WHERE id="'+IntToStr(r+1)+'"');
Form1.CGrid.Cells[2,r]:= SQLExecute('SELECT Date FROM Contracts WHERE id="'+IntToStr(r+1)+'"');
Form1.CGrid.Cells[3,r]:= SQLExecute('SELECT Customer FROM Contracts WHERE id="'+IntToStr(r+1)+'"');
end;
end;
end;
end;
То есть на данный момент id в Грид записывается нехитрой записью Form1.CGrid.Cells[0,r]:= IntToStr(r+1); что конечно же не верно.
Если например id записей в базе идут не по порядку, то есть есть разрыв в порядке, то соответствие id в базе и значения этих записей в столбце КОД в Гриде будут разные.
Вопрос: как вытаскивать id записи из базы и записывать в Грид.