7,276

(33 replies, posted in Russian)

это ваш полный SQL запрос? или только часть?
попробуйте так

strftime('%Y',{dtFrom}) as date
WHERE zakaz.godina = strftime('%Y',{dtFrom}) 

7,277

(2 replies, posted in General)

Hello,


My Visual database can't open the excel document for converting.

7,278

(1 replies, posted in General)

Multilingual support is planned.


Thanks.

7,279

(2 replies, posted in General)

Maybe I did not understand your question.

If you want to see several fields in CombBox, you can specify multiple fields in property FieldName
example: {buyer}  {voen}



Also you can download example, how to fill TextBox from ComboBox
http://myvisualdatabase.com/forum/misc. … download=1

7,280

(4 replies, posted in General)

Also I noticed this, but unfortunately I do not know the cause.

К сожалению не смогу помочь это сделать в проекте, так как сложно понять быстро, что к чему.
Можете сделать тестовый проект с примером, в котором это не работает, постараюсь помочь.

wertyby wrote:

Дмитрий а может знаете как можно реализовать при вводе даты в компоненте DateTimePicker (вручную), автоматический переход между позициями дд.мм.гггг (т.е. ввел значение даты курсор переместился на месяц а затем на год)?
(это млин привычка к таким базам и не хочется переключаться на мышь для выбора даты)

Поле Edit совсем ни как нельзя настроить для помещения в базу информации с датой?

в принципе он перемещается автоматически, после ввода даты, нажмите точку.


DateTimePicker к сожалению не может быть как компонент Edit с маской ввода.



В принципе с помощью скрипта можно организовать ввод дату в компонент Edit с маской: 00.00.0000;0;_
для этого на событии OnClick у кнопки сохранения записи
необходимо преобразовать значение текста в дату (EncodeDate)
затем эту дату присвоить невидимому компоненту DateTimePicker, с которого уже и будет сохраняться дата в базу.

7,283

(3 replies, posted in Russian)

1. К сожалению не могу ответить на этот вопрос,  я могу помочь только с конкретными вопросами, т.к. довольно сложно разобраться в незнакомом проекте, чтобы все понять, как было реализовано.


2. Проверил, не смог воспроизвести данную ошибку.


3. В вашем случае будет примерно так, если объект выбирается из ComboBox на предыдущей форме

procedure frmEmployee_OnShow (Sender: string; Action: string);
var
    id : integer;
   sAbbbr: string;
begin
    if Action='NewRecord' then
    begin
        id := StrToInt(frmEmployee.EditCounter1.Text);
        sAbbbr := SQLExecute('SELECT Abbbr FROM Uch WHERE id='+Form2.ComboBox1.sqlValue);
        frmEmployee.Edit1.Text:= Format(sAbbbr + '%.3d', [id]); 
    end;
end;

4. Можно, вы можете менять значение компонента DBFile1.CopyTo
тем самым менять местоположение, куда будет сохранен файл.


5.

Form1.TableGrid1.SelectedRow := 0; // выберет первую строку

7,284

(3 replies, posted in General)

ailinux wrote:

I tried the conde and it works but it dont show the message i want.. hmm

You can send me project to support@drive-software.com
I'll check it.

ailinux wrote:

Another question, can we disable the double click on a tablegrid?

Form1.TableGrid1.dbPopupMenu.Items.Items[0].Enabled := False;
ailinux wrote:

So we are forced to select the row on the table and then click a button for the specifyed action??

Yes.

procedure Form1_Button1_OnClick (Sender: string; var Cancel: boolean);
begin
    Form1.TableGrid1.SelectedRow := 0; // select first row
    Form1.Button2.Click;
end;

7,285

(3 replies, posted in General)

1. For add new a client, you should use button with action "NewRecord" instead "ShowForm"


2. try this

procedure frmNewClient_Button2_OnClick (Sender: string; var Cancel: boolean);
begin
      if frmNewClient.cboxNome.Text = '' then
      begin      
          MessageDlg('O campo "Nome" é obrigatório.',mtError,mbOK,0);
          Cancel := True;
      end;
end;

Приветствую,


к сожалению пока такой возможности нет.

У кнопки удаления, необходимо создать событие OnClick

procedure Form1_Button5_OnClick (Sender: string; var Cancel: boolean);
var
    ilinesNum: integer;
begin
    ilinesNum := SQLExecute ('SELECT linesNum FROM sprava WHERE '+Form1.TableGrid1.sqlValue);
    SQLExecute ('UPDATE statia SET otmetka=NULL WHERE id='+IntToStr(ilinesNum) );
end;

7,288

(7 replies, posted in Russian)

ID редактируемой записи можно узнать у свойства dbGeneralTableId у кнопки с действием "Сохранить запись"

procedure frmEmployee_OnShow (Sender: string; Action: string);
begin
    if Action='ShowRecord' then
    begin
        frmEmployee.Edit1.Text := IntToStr( frmEmployee.Button2.dbGeneralTableId );
    end;
end;

например 4 апострофа
первые и последние, как обычно, используются для формирования строки
а второй и третий обозначает как бы один апостроф в данной строке, как бы экранирует его.

wertyby
Это справедливо для любых баз данных, фактически записи из базы данных не удаляются, а лишь помечаются как удаленные, и это место будет занято новыми записями в процессе работы с базой данных.

7,291

(7 replies, posted in Russian)

kunar80
Думаю это возможно только с помощью сложного SQL запроса, но с ним к сожалению не подскажу.

7,292

(4 replies, posted in General)

An example for you

Данный пример, в отличие от других, максимально упрощен.
Если кратко, то в переменную sl загружается CSV файл.
Затем с помощью цикла проходим каждую строку из sl
где строку разбиваем на отдельные столбцы в массив arrStr

procedure Form1_Button2_OnClick (Sender: string; var Cancel: boolean);
var
   OpenDialog: TOpenDialog;
   sl: TStringList;
   arrStr: array of string;

   i,c: integer;
begin
     OpenDialog := TOpenDialog.Create(Form1);
     OpenDialog.InitialDir := ExtractFileDir(Application.Exename);

     if OpenDialog.Execute then
     begin
          sl := TStringList.Create;
          sl.LoadFromFile (OpenDialog.FileName);


          c := sl.Count - 1;
          for i := 0 to c do
          begin
               arrStr := SplitString(sl[i], ';'); // разбиваем строку (sl[i]) на массив (arrStr)

               // LastName
               // если arrStr[0] содержит текст, делаем экранирование одиночных кавычек (ReplaceStr), иначе присваиваем значение NULL
               if arrStr[0] <> '' then arrStr[0] := ''''+ ReplaceStr(arrStr[0], '''', '''''') + ''''
                   else arrStr[0] := 'NULL';

               // FirstName
               if arrStr[1] <> '' then arrStr[1] := ''''+ ReplaceStr(arrStr[1], '''', '''''') + ''''
                   else arrStr[1] := 'NULL';

               SQLExecute ('INSERT INTO base (lastname, firstname) VALUES ('+ arrStr[0] +','+ arrStr[1]+');');


               Form1.Label1.Caption := IntToStr(i+1) + ' of ' + IntToStr(c+1);
               Application.ProcessMessages;
          end;



          sl.Free;
          Form1.TableGrid1.dbUpdate;
     end;
     OpenDialog.Free;
end;


begin
end.

Приветствую,


к сожалению не смог понять суть базы данных, можете как нибудь просто описать, в чем суть?

7,295

(2 replies, posted in Russian)

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


Посмотрите видео урок 2, про создание телефонного справочника.
http://drive-software.com/myvisualdatabase_ru.html


там  каждому абоненту можно присвоить его группу, выбрав ее название из ComboBox, для чего используется связь.

7,296

(10 replies, posted in Russian)

Чтобы вывести в грид данные из связанных списков, нет необходимости в SQL запросах.
Скачайте пожалуйста пример связанных списков
http://myvisualdatabase.com/forum/viewtopic.php?id=1081

7,297

(1 replies, posted in Russian)

Скорей всего компонент TableGrid не настроен (не указаны таблицы и поля),  поэтому возникает ошибка.

7,298

(4 replies, posted in General)

An example for you
http://myvisualdatabase.com/forum/misc. … download=1

Позволяет быстро найти необходимое значение в списке ComboBox

procedure Form1_edGroupSearch_OnChange (Sender: string);
begin
    Form1.cbGroups.dbFilter := 'groupname LIKE "%'+ Form1.edGroupSearch.Text +'%"';
    UpdateDatabase('groups');

    if Form1.cbGroups.Items.Count = 2 then
    begin
        Form1.cbGroups.DroppedDown:=False;
        Form1.cbGroups.ItemIndex := 1;
    end else Form1.cbGroups.DroppedDown:=True;
end;

begin
    Form1.edGroupSearch.TextHint := 'Search for groups...';
end.


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

Импорт данных из CSV файла в базу данных

procedure Form1_Button2_OnClick (Sender: string; var Cancel: boolean);
var
   OpenDialog: TOpenDialog;
   sl: TStringList;
   arrStr: array of string;

   i,c: integer;
begin
     OpenDialog := TOpenDialog.Create(Form1);
     OpenDialog.InitialDir := ExtractFileDir(Application.Exename);

     if OpenDialog.Execute then
     begin
          sl := TStringList.Create;
          sl.LoadFromFile (OpenDialog.FileName);


          c := sl.Count - 1;
          for i := 0 to c do
          begin
               arrStr := SplitString(sl[i], ';');

               // LastName
               if arrStr[0] <> '' then arrStr[0] := ''''+ ReplaceStr(arrStr[0], '''', '''''') + ''''
                   else arrStr[0] := 'NULL';

               // FirstName
               if arrStr[1] <> '' then arrStr[1] := ''''+ ReplaceStr(arrStr[1], '''', '''''') + ''''
                   else arrStr[1] := 'NULL';

               SQLExecute ('INSERT INTO base (lastname, firstname) VALUES ('+ arrStr[0] +','+ arrStr[1]+');');


               Form1.Label1.Caption := IntToStr(i+1) + ' of ' + IntToStr(c+1);
               Application.ProcessMessages;
          end;



          sl.Free;
          Form1.TableGrid1.dbUpdate;
     end;
     OpenDialog.Free;
end;


begin
end.

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