это ваш полный SQL запрос? или только часть?
попробуйте так
strftime('%Y',{dtFrom}) as date
WHERE zakaz.godina = strftime('%Y',{dtFrom})
My Visual Database → Posts by DriveSoft
это ваш полный SQL запрос? или только часть?
попробуйте так
strftime('%Y',{dtFrom}) as date
WHERE zakaz.godina = strftime('%Y',{dtFrom})
Hello,
My Visual database can't open the excel document for converting.
Multilingual support is planned.
Thanks.
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
Also I noticed this, but unfortunately I do not know the cause.
К сожалению не смогу помочь это сделать в проекте, так как сложно понять быстро, что к чему.
Можете сделать тестовый проект с примером, в котором это не работает, постараюсь помочь.
Дмитрий а может знаете как можно реализовать при вводе даты в компоненте DateTimePicker (вручную), автоматический переход между позициями дд.мм.гггг (т.е. ввел значение даты курсор переместился на месяц а затем на год)?
(это млин привычка к таким базам и не хочется переключаться на мышь для выбора даты)Поле Edit совсем ни как нельзя настроить для помещения в базу информации с датой?
в принципе он перемещается автоматически, после ввода даты, нажмите точку.
DateTimePicker к сожалению не может быть как компонент Edit с маской ввода.
В принципе с помощью скрипта можно организовать ввод дату в компонент Edit с маской: 00.00.0000;0;_
для этого на событии OnClick у кнопки сохранения записи
необходимо преобразовать значение текста в дату (EncodeDate)
затем эту дату присвоить невидимому компоненту DateTimePicker, с которого уже и будет сохраняться дата в базу.
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; // выберет первую строку
I tried the conde and it works but it dont show the message i want..
You can send me project to support@drive-software.com
I'll check it.
Another question, can we disable the double click on a tablegrid?
Form1.TableGrid1.dbPopupMenu.Items.Items[0].Enabled := False;
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;
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;
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
Это справедливо для любых баз данных, фактически записи из базы данных не удаляются, а лишь помечаются как удаленные, и это место будет занято новыми записями в процессе работы с базой данных.
kunar80
Думаю это возможно только с помощью сложного SQL запроса, но с ним к сожалению не подскажу.
Данный пример, в отличие от других, максимально упрощен.
Если кратко, то в переменную 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.
Приветствую,
к сожалению не смог понять суть базы данных, можете как нибудь просто описать, в чем суть?
Скорей всего ваш вопрос возник от не понимания общих принципов создания баз данных.
Вы не должны копировать текст от записей для других записей, для этого используются связи.
Посмотрите видео урок 2, про создание телефонного справочника.
http://drive-software.com/myvisualdatabase_ru.html
там каждому абоненту можно присвоить его группу, выбрав ее название из ComboBox, для чего используется связь.
Чтобы вывести в грид данные из связанных списков, нет необходимости в SQL запросах.
Скачайте пожалуйста пример связанных списков
http://myvisualdatabase.com/forum/viewtopic.php?id=1081
Скорей всего компонент TableGrid не настроен (не указаны таблицы и поля), поэтому возникает ошибка.
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.
Проект с примером:
My Visual Database → Posts by DriveSoft
Powered by PunBB, supported by Informer Technologies, Inc.
Theme Hydrogen by Kushi