1 (edited by netros 2018-08-06 09:01:13)

Topic: SQL-запрос в скрипт

Уже всю голову сломал.
Как SQL-запрос запихнуть в двумерный массив, и какого типа.

если

var Array: array of extended;
begin
Array := SQLExecute('SELECT * FROM Table');
for i := 0 to iCol do
    begin
    TableGrid.Cells[0, i] := VarToStr(Array[0,i]);
    TableGrid.Cells[1, i] := Array[1,i];
    end;
end;

то без ошибок выдаёт пустое значение.

а если

var Array: array of string;
begin
Array := SplitString(VarToStr(SQLExecute('SELECT * FROM Table')), '|');
for i := 0 to iCol do
    begin
    TableGrid.Cells[0, i] := Array[0,i];
    TableGrid.Cells[1, i] := Array[1,i];
    end;
end;

то для первого значения выдаёт только первое поле, а второе просто отсутствует

И ещё вопрос вдогонку
Можно ли в грид вставить CheckBox? не "Нет", "да", а именно чекбокс?

2 (edited by netros 2018-08-06 16:02:01)

Re: SQL-запрос в скрипт

Блин, не могу понять, почему по запросу
s := VarToStr(SQLExecute('SELECT * FROM Table'));
выводится только первое поле? Неужели каждое поле придётся вытягивать отдельным запросом?
И какой используется сепаратор строк?

Re: SQL-запрос в скрипт

Функция SQLExecute довольно простая, и необходима только для извлечения одного поля и одной записи.
В вашем случае необходимо использовать более продвинутую функцию SQLQuery, которая позволяет получать несколько полей и записей, пример

procedure Form1_Button1_OnClick (Sender: TObject; var Cancel: boolean);
var
    Results: TDataSet;
    sHost: string;
    id: integer;
begin
    SQLQuery('SELECT id, host FROM host', Results);
    while not Results.Eof do
    begin
        sHost := Results.FieldByName('host').asString;
        ID := Results.FieldByName('id').asInteger;

        Results.Next;
    end;

    Results.Close;
end;
Dmitry.

Re: SQL-запрос в скрипт

netros wrote:

И ещё вопрос вдогонку
Можно ли в грид вставить CheckBox? не "Нет", "да", а именно чекбокс?

Можно скриптом

procedure Form1_TableGrid1_OnChange (Sender: string);
begin
    Form1.TableGrid1.Columns.InsertCheckBoxColumn(0);
end;
Dmitry.

Re: SQL-запрос в скрипт

DriveSoft wrote:
procedure Form1_Button1_OnClick (Sender: TObject; var Cancel: boolean);
var
    Results: TDataSet;
    sHost: string;
    id: integer;
begin
    SQLQuery('SELECT id, host FROM host', Results);
    while not Results.Eof do
    begin
        sHost := Results.FieldByName('host').asString;
        ID := Results.FieldByName('id').asInteger;

        Results.Next;
    end;

    Results.Close;
end;

а код такого вида

procedure Form1_Button1_OnClick (Sender: TObject; var Cancel: boolean);
var
    Results: TDataSet;
    sHost: string;
    id: integer;
begin
    SQLQuery('SELECT id, host FROM host', Results);
    while not Results.Eof do
    begin
        sHost := Results.FieldByName('host').asString;
        Results.FieldByName('id').asString := SQLExecute('SELECT MACadress FROM Table2 WHERE id_host='+Results.FieldByName('id').asString); 

        Results.Next;
    end;

    Results.Close;
end;

проканает?
то есть интересует возможность изменять значения элементов самого DataSet"а... он же ведь массив так или иначе?

Re: SQL-запрос в скрипт

m.prokhachev
нет, так нельзя. А зачем это делать? В вашем случае необходимо просто составить правильный SQL запрос, чтобы получить mac адрес, пример

SQLQuery('SELECT host.id, host.host, Table2.MACadress FROM host LEFT OUTER JOIN Table2 ON Table2.id_host = host.id', Results);
Dmitry.