konstantin.gussev wrote:

А почему ругается? Все сделано по вашему примеру.

Приложите пожалуйста ваш проект и сообщите версию используемой вами программы.

3,077

(7 replies, posted in General)

Hello.


Unfortunately I have not received your e-mail.

3,078

(2 replies, posted in General)

Hello.


Check out this sql query

SELECT
SUM(CASE Category WHEN 'BMW' THEN Amount ELSE 0 END) "BMW"
,SUM(CASE Category WHEN 'KIA' THEN Amount ELSE 0 END) "KIA"
,SUM(CASE Category WHEN 'ISUZU' THEN Amount ELSE 0 END) "ISUZU"
FROM TableName  

It's correct.

3,080

(5 replies, posted in General)

Hello.



Check it out

procedure Form1_TableGrid1_OnMouseDown (Sender: string; MouseLeft, MouseRight, MouseMiddle: boolean; Shift, Alt, Ctrl: boolean; X, Y: Integer);
begin
 form1.memo1.Text := sqlexecute('select message from phonecalls where id =' +inttostr(Form1.TableGrid1.dbIndexToID(Form1.TableGrid1.GetRowAtPos(x,y))));
 form1.panel1.Visible := true;
end;

3,081

(1 replies, posted in Script)

Thank you for the example!

3,082

(1 replies, posted in General)

Hello.



How to send email
http://myvisualdatabase.com/forum/viewtopic.php?id=1445


How to send sms
http://myvisualdatabase.com/forum/viewtopic.php?id=1418

в конце скрипта должны бить эти строки

begin

end.

возможно вы их случайно удалили, т.е. в целом скрипт должен быть таким:

 procedure FillGridFiles(Grid: TdbStringGridEx; path: string); // процедура чтения файлов в грид
var
    sl: TStringList;
    i,c: integer;
    NxTextColumn: TNxTextColumn;
begin
    sl := TStringList.Create;
    sl.Text := GetFilesList(path);

    Grid.Columns.Clear;
    try
        Grid.Columns.Add(TNxTextColumn);           
    except
    end;
    Grid.Columns[0].Color := clWhite;

    c := sl.Count-1;
    for i := 0 to c do
    begin
        Grid.AddRow;
        Grid.Cells[0, Grid.RowCount-1] := sl[i];
    end;
    sl.Free;
end;


procedure Form1_Button1_OnClick (Sender: string; var Cancel: boolean);
begin
    FillGridFiles(Form1.TableGrid1, 'C:\Backup'); // вызов процедуры, с указанием из какой папки и в какой грид выводить список файлов
end;

begin

end.                                             

3,084

(3 replies, posted in Reports)

try this:

Form1.frxXLSExport1.OpenExcelAfterExport := False;

3,085

(4 replies, posted in Script)

I have checked your project, it's works, I don't get any error message.

3,086

(1 replies, posted in Russian)

Здравствуйте



Думаю нет нужды для этих целей использовать буфер обмена.
Вы можете текст комопнента присвоить другому компоненту, пример

  Form2.Edit1.Text := frmAddSupplier.edSupplier.Text;

3,087

(7 replies, posted in Script)

Thank you for your examples!

3,088

(11 replies, posted in FAQ)

Completely universal script to export/import data from a table. Just specify database fields in parameters of procedure.


procedure Form1_bExport_OnClick (Sender: string; var Cancel: boolean);
begin
    Export('SELECT lastname, firstname, salary, dateofbirth, isSmoke, comment FROM employees', '1.csv');
end;

procedure Form1_bImport_OnClick (Sender: string; var Cancel: boolean);
begin
    Import('employees', 'lastname,firstname,salary,dateofbirth,isSmoke,comment', '1.csv');
end;

procedure Form1_bImportCheckDup_OnClick (Sender: string; var Cancel: boolean);
begin
    Import('employees', 'lastname,firstname,salary,dateofbirth,isSmoke,comment', '1.csv', 'lastname,firstname');
end;                                             


                                                 
procedure Export (SQL: string; FileName: string);
var
    Results: TDataSet;
    i,c: integer;
    sl: TStringList;
    sValue, sValues: string;
begin

    SQLQuery(sql, Results);
    sl := TStringList.Create;
    c := Results.FieldCount-1;

    while not Results.eof do
    begin
        sValues := '';
        for i := 0 to c do
        begin
            if not Results.Fields.Fields[i].isNull then
            begin
                sValue := Results.Fields.Fields[i].AsString;

                if (Results.Fields.Fields[i].DataType = ftFloat) or (Results.Fields.Fields[i].DataType = ftLargeint) then
                    sValue := ReplaceStr(sValue, ',', '.')
                else
                begin
                    sValue := ReplaceStr(sValue, ',', ',');
                    sValue := ReplaceStr(sValue, #13#10, '|');
                    sValue := '''' + escape_special_characters(sValue) + '''';
                end;
            end else sValue := 'NULL';

            sValues := sValues + sValue+',';
        end;

        if sValues <> '' then SetLength(sValues, Length(sValues)-1);
        sl.Add(sValues);
        Results.next;
    end;

    sl.SaveToFile(FileName);
    sl.Free;
    Results.Close;
end;

procedure Import(TableName, Fields: string; FileName: string; CheckDuplicateFields: string = '');
    function ArrayInCheck(a: array of string; sValue: string): boolean;
    var
        i,c: integer;
    begin
        result := False;
        c := Length(a)-1;
        for i := 0 to c do
        begin
            if LowerCase(a[i])=LowerCase(sValue) then
            begin
                result := true;
                break;
            end;
        end;
    end;
var
    iField, cField: integer;
    iLine, cLine: integer;
    sl: TStringList;
    arrValues: array of string;
    arrFields: array of string;
    arrFieldsDuplicate: array of string;
    sValue, sValues: string;
    sWhereDuplicate: string;
begin
    if CheckDuplicateFields <> '' then arrFieldsDuplicate := SplitString(CheckDuplicateFields, ',');

    sl := TStringList.Create;
    sl.LoadFromFile(FileName);
    arrFields := SplitString(Fields, ',');
    cLine := sl.Count-1;

    for iLine := 0 to cLine do
    begin
        sValues := '';
        arrValues := SplitString(sl[iLine], ',');
        if Length(arrFields) <= Length(arrValues) then
        begin
            sWhereDuplicate := '';
            cField := Length(arrFields)-1;
            for iField := 0 to cField do
            begin
                sValue := arrValues[iField];
                sValue := ReplaceStr(sValue, '&comma;', ',');
                sValue := ReplaceStr(sValue, '|', #13#10);
                sValues := sValues + sValue+',';


                if ArrayInCheck(arrFieldsDuplicate, arrFields[iField]) then
                    sWhereDuplicate := sWhereDuplicate +'('+ arrFields[iField]+'='+sValue + ') AND ';
            end;

            if sValues <> '' then
            begin
                SetLength(sValues, Length(sValues)-1);

                if sWhereDuplicate <> '' then
                begin
                    SetLength(sWhereDuplicate, Length(sWhereDuplicate)-5);
                    if SQLExecute('SELECT COUNT(id) FROM '+TableName+' WHERE '+sWhereDuplicate)=0 then
                        SQLExecute('INSERT INTO '+TableName+' ('+Fields+') VALUES ('+sValues+')');
                end else
                    SQLExecute('INSERT INTO '+TableName+' ('+Fields+') VALUES ('+sValues+')');
            end;

        end;
    end;

    sl.Free;
end;


Example: http://myvisualdatabase.com/forum/misc. … download=1

3,089

(2 replies, posted in General)

Hello.



Example:

// for a label
procedure Form1_Label1_OnClick (Sender: string);
begin
    OpenURL('http://google.com');
end;

// for a button
procedure Form1_Button1_OnClick (Sender: string; var Cancel: boolean);
begin
    OpenURL('http://google.com');
end;

Пример универсального скрипта для экспорта и импорта данных из таблиц (Import-Export.zip). Вам просто необходимо указать столбцы в параметрах процедуры, которые должны быть импортированы или экспортированы.


В файле "Import-Export with autofill dictionaries.zip"  вы найдете проект с примером, который работает и со словарями, автоматически дополняя их, если значение отсутствует в таблице.


procedure Form1_bExport_OnClick (Sender: string; var Cancel: boolean);
begin
    Export('SELECT lastname, firstname, salary, dateofbirth, isSmoke, comment FROM employees', '1.csv');
end;

procedure Form1_bImport_OnClick (Sender: string; var Cancel: boolean);
begin
    Import('employees', 'lastname,firstname,salary,dateofbirth,isSmoke,comment', '1.csv');
end;

procedure Form1_bImportCheckDup_OnClick (Sender: string; var Cancel: boolean);
begin
    Import('employees', 'lastname,firstname,salary,dateofbirth,isSmoke,comment', '1.csv', 'lastname,firstname');
end;                                             




                                                          
procedure Export (SQL: string; FileName: string);
var
    Results: TDataSet;
    i,c: integer;
    sl: TStringList;
    sValue, sValues: string;
begin

    SQLQuery(sql, Results);
    sl := TStringList.Create;
    c := Results.FieldCount-1;

    while not Results.eof do
    begin
        sValues := '';
        for i := 0 to c do
        begin
            if not Results.Fields.Fields[i].isNull then
            begin
                sValue := Results.Fields.Fields[i].AsString;

                if (Results.Fields.Fields[i].DataType = ftFloat) or (Results.Fields.Fields[i].DataType = ftLargeint) then
                    sValue := ReplaceStr(sValue, ',', '.')
                else
                begin
                    sValue := ReplaceStr(sValue, ',', '&comma;');
                    sValue := ReplaceStr(sValue, #13#10, '|');
                    sValue := '''' + escape_special_characters(sValue) + '''';
                end;
            end else sValue := 'NULL';

            sValues := sValues + sValue+',';
        end;

        if sValues <> '' then SetLength(sValues, Length(sValues)-1);
        sl.Add(sValues);
        Results.next;
    end;

    sl.SaveToFile(FileName);
    sl.Free;
    Results.Close;
end;

procedure Import(TableName, Fields: string; FileName: string; CheckDuplicateFields: string = '');
    function ArrayInCheck(a: array of string; sValue: string): boolean;
    var
        i,c: integer;
    begin
        result := False;
        c := Length(a)-1;
        for i := 0 to c do
        begin
            if LowerCase(a[i])=LowerCase(sValue) then
            begin
                result := true;
                break;
            end;
        end;
    end;
var
    iField, cField: integer;
    iLine, cLine: integer;
    sl: TStringList;
    arrValues: array of string;
    arrFields: array of string;
    arrFieldsDuplicate: array of string;
    sValue, sValues: string;
    sWhereDuplicate: string;
begin
    if CheckDuplicateFields <> '' then arrFieldsDuplicate := SplitString(CheckDuplicateFields, ',');

    sl := TStringList.Create;
    sl.LoadFromFile(FileName);
    arrFields := SplitString(Fields, ',');
    cLine := sl.Count-1;

    for iLine := 0 to cLine do
    begin
        sValues := '';
        arrValues := SplitString(sl[iLine], ',');
        if Length(arrFields) <= Length(arrValues) then
        begin
            sWhereDuplicate := '';
            cField := Length(arrFields)-1;
            for iField := 0 to cField do
            begin
                sValue := arrValues[iField];
                sValue := ReplaceStr(sValue, '&comma;', ',');
                sValue := ReplaceStr(sValue, '|', #13#10);
                sValues := sValues + sValue+',';


                if ArrayInCheck(arrFieldsDuplicate, arrFields[iField]) then
                    sWhereDuplicate := sWhereDuplicate +'('+ arrFields[iField]+'='+sValue + ') AND ';
            end;

            if sValues <> '' then
            begin
                SetLength(sValues, Length(sValues)-1);

                if sWhereDuplicate <> '' then
                begin
                    SetLength(sWhereDuplicate, Length(sWhereDuplicate)-5);
                    if SQLExecute('SELECT COUNT(id) FROM '+TableName+' WHERE '+sWhereDuplicate)=0 then
                        SQLExecute('INSERT INTO '+TableName+' ('+Fields+') VALUES ('+sValues+')');
                end else
                    SQLExecute('INSERT INTO '+TableName+' ('+Fields+') VALUES ('+sValues+')');
            end;

        end;
    end;

    sl.Free;
end;


Проект с примером:

3,091

(9 replies, posted in Russian)

Сделал для вас проект с примером, скрипт является универсальным, вам просто нужно указать наименование столбцов для импорта или экспорта в параметрах процедур.


Насчет дублирования записей, вам нужно решить, по каким именно признакам будет определяться, что это дубликат записи, например создавать для каждой записи уникальный идентификатор, либо определять дубликат по сочетанию полей, например имя, фамиля, год рождения.
http://myvisualdatabase.com/forum/viewt … ?pid=21566

3,092

(1 replies, posted in General)

Hello.


MDI forms is not support.

можно так

procedure FillGridFiles(Grid: TdbStringGridEx; path: string); // процедура чтения файлов в грид
var
    sl: TStringList;
    i,c: integer;
    NxTextColumn: TNxTextColumn;
begin
    sl := TStringList.Create;
    sl.Text := GetFilesList(path);

    Grid.Columns.Clear;
    try
        Grid.Columns.Add(TNxTextColumn);           
    except
    end;
    Grid.Columns[0].Color := clWhite;

    c := sl.Count-1;
    for i := 0 to c do
    begin
        Grid.AddRow;
        Grid.Cells[0, Grid.RowCount-1] := sl[i];
    end;
    sl.Free;
end;


procedure Form1_Button1_OnClick (Sender: string; var Cancel: boolean);
begin
    FillGridFiles(Form1.TableGrid1, 'C:\Backup'); // вызов процедуры, с указанием из какой папки и в какой грид выводить список файлов
end;

3,094

(5 replies, posted in General)

Check it out
procedure derekwhichsheetisactive;  //*** highlight grid row in each tabsheet
begin
  if form1.PageControl1.ActivePage = form1.tabsheet1 then
    begin
      if form1.gridemployees.selectedrow < 0 then form1.gridemployees.selectedrow := 0;
      vrowid := form1.gridemployees.selectedrow;
      if form1.gridemployees.selectedrow > -1 then form1.button1.click;
      form1.gridemployees.selectedrow := vrowid;
      form1.gridemployees.setfocus;
    end;
  if form1.PageControl1.ActivePage = form1.tabsheet2 then
    begin
      if form1.gridproducts.selectedrow < 0 then form1.gridproducts.selectedrow := 0;
      vrowid := form1.gridproducts.selectedrow;
      if form1.gridproducts.SelectedRow > -1 then form1.button5.click;
      form1.gridproducts.selectedrow := vrowid;
      form1.gridproducts.setfocus;
    end;
end;

spectre
Увы но WinRAR пишет что архив поврежден.

3,096

(11 replies, posted in General)

For ComboBox1 set properties
ForeignKey = people.id_Status
FieldName = Status

v_pozidis wrote:

Updated, my new example is the attached file. I have added a new table Work. In the SQL Search button it should work also wih the edit boxex and the new combobox (Work).

Fixed project

3,098

(3 replies, posted in Reports)

I have checked your project, it's work for me.

3,099

(5 replies, posted in General)

teco049


please download latest beta version
https://www.dropbox.com/s/4rfukqr2r1awq … b.zip?dl=0


now you can enable code folding in the context menu of script editor.

это можно сделать с помощью скриптов или тригеров
http://zametkinapolyah.ru/zametki-o-mys … qlite.html
http://souptonuts.sourceforge.net/readm … orial.html


постараюсь в ближайшее время сделать для вас пример.