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

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

в качестве временного решения
нужно открыть файл settings.ini и написать следующее
 
[DisableUpperCase]
Tablename.fieldname1=
Tablename.fieldname2=

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


Если все же регистронезависимый поиск необходим, дайте знать, вышлю вам исправленную версию файла sqlite.dll


2. Конструктор меню планируется.


3. SQLiteStudio умеет выгружать отдельные таблицы в DBF

Form1.TableGrid1.dbItemID
вернет id записи, если запись в гриде не выбрана, то вернет -1


все остальные действия, такие как установить связь с записью или удалить, можно выполнить только с помощью SQL запроса в скрипте, используя функцию SQLExecute (SQL запрос)

9,603

(1 replies, posted in General)

Hello,

I think that is possible, but maybe I'm wrong you understand please do a project, so I can clearly see what you need.

поправил проект, отправил  на email.

9,605

(8 replies, posted in Russian)

1. На форме SotrudnikiAdd у гридов UsersComputer и TableGrid2 просто снимите галочку в настройках: "Включить автовыполнение запроса (показать все записи в таблице)"


2. Сводный грид сделать получиться только с помощью SQL запроса, в котором необходимо объединить 5 таблиц с помощью команды UNION, подробней об этом можно прочитать здесь http://www.sql.ru/docs/sql/u_sql/ch14.shtml


3. просто в грид добавить поле с данными о мониторе, т.о. в таблице будут данные вида:
Иванов А. А.   Монитор №345234534
Иванов А. А.   Монитор №754674567

9,606

(3 replies, posted in Russian)

Привет )

1.
посмотрите проект в этой папке, который идет в комплекте с программой
Documents\My Visual Database\Examples\Linked Lists
там связаны три комбобокса, Страна - Регион - Город


2. Сохранить excel как csv и сделать импорт с помощью SQLiteStudio


3. Сложно сказать, скиньте проект на support@drive-software.com

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

atempbox

замените mbYes+mbNo  НА  mbOK+mbCancel

Воспользуйтесь событием кнопки OnClick


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


пример:

procedure Form1_Button1_OnClick (Sender: string; var Cancel: boolean);
begin
   if Form1.Edit1.Text='' then
   begin
      ShowMessage('Незаполнено обязательное поле.');
      Cancel := True;
   end;
end;

Привести текст к числовому виду можно так: StrToInt(текст)

в случае с компонентом Label:  StrToInt(Form1.Label1.Caption)
для грида тоже самое, текст ячейки нужно привести к числу, если необходимо сранивать сравнивать числа.


а чтобы сравнить, в целом условие будет такое

if StrToInt(Form1.GridSearch.Cells[1,Form1.GridSearch.SelectedRow]) = StrToInt(Form1.Label1.Caption) then ShowMessage('равно');


при использовании функции StrToInt может возникнуть ошибка, если попытаться привести текст к числовому типу, для этого можно отловить эту ошибку и обработать, например так:


try
  if StrToInt(Form1.GridSearch.Cells[1,Form1.GridSearch.SelectedRow]) = StrToInt(Form1.Label1.Caption) then ShowMessage('равно');
except
  ShowMessage('Возникла ошибка преобразования к числовому типу');
end;

Добавил для этого свойство SelectedRow
Скачайте 1.41 версию
https://www.dropbox.com/s/fr76z69sc69l1 … 201.41.zip


procedure Form1_Button1_OnClick (Sender: string; var Cancel: boolean);
begin
    
   ShowMessage(Form1.GridSearch.Cells[1,Form1.GridSearch.SelectedRow]);

end;

здесь показывается сообщение с текстом ячейки в 1 колонке выбранной строки грида.

akarbishev
почти все эти компоненты можно создать через скрипт.


Запуск внешних программ реализовано в версии 1.41, которая я пока не выпустил, но скачать ее можно тут
https://www.dropbox.com/s/fr76z69sc69l1 … 201.41.zip

OpenFile('имя файла'); // запустит программу либо откроет файл программой по умолчанию
OpenFile('имя файла', 'имя файла программы, с помощью которой необходимо открыть'); // откроет файл указанной программой
OpenUrl('http://ссылка'); // откроет ссылку в браузере по умолчанию.

Спасибо за идеи smile

9,614

(2 replies, posted in General)

Hi,


I don't see your project, please send me to support@drive-software.com

9,615

(31 replies, posted in Russian)

Владислав Косяков

Если изменяется таблица, которая выводится в грид с авто выполнением, то это отслеживается и обновляется автоматически, но в данном случае изменятся другая, связанная таблица, поэтому придется обновить самостоятельно:
Form1.TableGrid1.dbUpdate;


этот метод я только что добавил, скачайте последнюю версию по этой ссылке:
https://www.dropbox.com/s/fr76z69sc69l1 … 201.41.zip

9,616

(33 replies, posted in Russian)

Владислав Косяков
Строка Оборудование, всего всегда будет первой если конечно не пользоваться сортировкой )


пустые строки необязательны.

9,617

(1 replies, posted in Script)

Sorry for delay.


Example how to change background cell and text color
Form1.TableGrid1.Cell[0, 0].Color:= clRed;
Form1.TableGrid1.Cell[0, 0].TextColor:= clGreen;


But first, please download unofficial 1.41 version
https://www.dropbox.com/s/fr76z69sc69l1 … 201.41.zip

9,618

(3 replies, posted in Russian)

Есть, так например можно сохранять настройки

procedure Form1_Button1_OnClick (Sender: string; var Cancel: boolean);
var
   ini: TIniFile;
   s: string;
begin
     ini := TiniFile.Create('d:\file.ini');
     ini.WriteString('SectionName', 'ValueName', 'value');
     s := ini.ReadString('SectionName', 'ValueName', 'default value');
     ShowMessage(s);
     ini.Free;
end;

а так выбрать файл

procedure Form1_Button1_OnClick (Sender: string; var Cancel: boolean);
var
   OpenDialog: TOpenDialog;
begin
     OpenDialog := TOpenDialog.Create(Form1);
     if OpenDialog.Execute then ShowMessage(OpenDialog.FileName);
     OpenDialog.Free;
end;

9,619

(3 replies, posted in Russian)

К сожалению в текущей версии у скрипта нет возможности выбрать папку и получить все файлы из папки, но спасибо за идею, записал, думаю с ближайшее время реализую такую возможность.

9,620

(33 replies, posted in Russian)

Владислав Косяков

Думаю с данным запросом все в порядке, проблема в том, что грид OborMestoTab не имеет идентификаторов записи, когда заполняется SQL запросом, поправьте SQL запрос у кнопки StatMesto

SELECT

MestoSotrS.mestosot,
Count(Oborud.id),
MestoSotrS.id          

FROM Oborud

LEFT OUTER JOIN SotrS ON Oborud.id_SotrS = SotrS.id
LEFT OUTER JOIN MestoSotrS ON SotrS.id_MestoSotrS = MestoSotrS.id

GROUP BY MestoSotrS.mestosot

тут я просто добавил поле MestoSotrS.id, чтобы грид знал у какой записи, какой идентификатор, чтобы когда вы на нем нажимаете, срабатывало условие в вашем запросе WHERE MestoSotrS.id = {OborMestoTab}

9,621

(8 replies, posted in Russian)

djon.home

Тогда думаю только UNION поможет, заголовки можно задать в двух запросах одинаковые, с помощью псевдонимов, SELECT field as "fieldname" и в каждом отдельном запросе завести дополнительное поле, в котором будет содержать некий идентификатор, чтобы различать  в отчете данные от какого запроса пришли, например

SELECT "01" as "idsql", field...

UNION

SELECT "02"  as "idsql", field...


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

Посмотрите этот проект, в качестве примера реализации отношения многие ко многим.

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

В примере есть еще таблица Genre для жанра книг, в вашем случае не нужна.


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

Вам нужна связь многие ко многим?
когда компьютер может иметь несколько пользователей, а пользователь может иметь несколько компьютеров?

Владислав Косяков
всмысле возможность отменить последнее действие? как через нажатие Ctrl+Z ?

Как я уже говорил, не должно быть проблем с дефолтным значением Сотрудник, которое можно задать на этапе проектирования, скиньте проект на support@drive-software.com думаю все это можно сделать без использоваться SQL


а,б) У кнопки есть событие OnAfterClick, которое срабатывает после того, как кнопка выполнит заданное ей действие, т.е. после выполнения SQL запроса в вашем случае, код примерно такой

procedure Form2_Button1_OnAfterClick (Sender: string);
begin
  ShowMessage ('Запись добавлена/отредактирована успешно'); // сообщение
  Form2.Close; // закрываем форму
  
  // для обновления GRID можно из скрипта нажать на кнопку поиска, которая выводит результат поиска в данный GRID
  Form1.Button1.Click;
end;

в,г) можно создать две кнопки для сохранения, одна сохраняет запись и закрывает форму, а вторая кнопка будет сохранять запись и чистить поля поля, чтобы очистить например текстовое поле, можно написать так Form1.Edit1.Text := '';


* в приведенном выше коде, необходимо имена компонентов заменить на свои.