Hello.


Unfrotunately I can't find the reason of error, but if you run this procedure twice, it's works, strangely )

try this

procedure Dump(adoRS:Variant);
var
  i:integer;
  v:Variant;
begin
  while not adoRS.EOF do
  begin
    for i:=0 to adoRS.Fields.Count-1 do
    begin
      if adoRS.Fields(i).Name<>'$Text' then
      begin
        if adoRS.Fields(i).Type=136 then
        begin
          Dump(adoRS.Fields(i).Value); // crash if uncommented
        end
        else // =12
        begin
          log(': adoRS.Fields('+IntToStr(i)+') : '+adoRS.Fields(i).Name+' => '+adoRS.Fields(i).Value);
        end;
      end;
    end;
    adoRS.MoveNext;
  end;
end;


procedure Form1_Button1_OnClick (Sender: string; var Cancel: boolean);
var
  adoCN,
  adoRS:Variant;
begin

  adoCN:=CreateOleObject('ADODB.Connection');
  adoRS:=CreateOleObject('ADODB.Recordset');
  adoCN.Open('Provider=MSDAOSP; Data Source=MSXML2.DSOControl');
  adoRS.Open(ExtractFilePath(Application.ExeName)+'catalog.xml', adoCN);

  try Dump(adoRS); except end;
  Form1.Memo1.Clear;
  Dump(adoRS);
end;

вместо

    frmLogin.cbLogin.dbItemID := reg.ReadInteger('Login');

попробуйте

    if Reg.ValueExists('Login') then frmLogin.cbLogin.dbItemID := reg.ReadInteger('Login');
kovalenko wrote:

Дмитрий здравствуйте. Помогите пожалуйста с написанием SQL запроса на поиск. На frmMailinvoiceAQ есть тестовые поля . Edit1 для ввода данных, Button13 кнопка с запросом, TableGrid2 для вывода результатов. Что хочется сделать, что-бы при вводе номера накладной в одно поле для поиска Edit1 (а накладных два типа: приходная и расходная) производился поиск с выводом всех документов с данными номерами. В идеале с выводом в существующий GridMailinvoice без изменения структуры вывода данных при поиске по полям ComboBox1 и ComboBox2. У меня в GridMailinvoice настроено отображение по цветам в зависимости от...не хотелось-бы менять существующие настройки. А то упёрса с выводом чере SQL дат из базы в грид....И если позволите то ещё одна просьба, помогите настроить поиск по дате от-до (DateTimePicker1-4), а то ужо совсем оттупляюсь(((((
Проект отправляю вам на почту.

К сожалению не смог понять сути вопроса.

2,929

(36 replies, posted in Russian)

andrey.yugay

загвоздка вот в чем

есть связи с таблицами, как мне их прописать в коде?
пример

'BEGIN '+
    '    INSERT INTO logs(w_date, plant, operation, username, id_rec, date, agent, st, stcode)  VALUES (datetime(''now'', ''localtime''), ''SHC'', ''DELETE RECORD'', '+sUserName+', NEW.id, NEW.shc_data, NEW.shc_agent, NEW.id_st, NEW.id_st)

NEW.id_st ссылается на другую таблицу... если я оставляю так, то в логах появится только номер записи... как мне предопределить, что там на основании ID выберется другое значение, к примеру, stname (наименование станции)

я так понимаю это триггер срабатывает на удаление? тогда почему вы пишите NEW вместо OLD?

вместо NEW.id_st думаю можно написать подзапрос

(SELECT st.stName FROM st WHERE st.id=OLD.id_st)


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


В настройках кнопки Сохранить запись (Button1) удалите компонент ComboBox3, который вы видимо внесли туда по ошибке.

2,930

(9 replies, posted in General)

Thank you. I know about this bug, but can't fix it now. Please press left arrow button on keyboard to scroll columns.

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

1. Например так

procedure Form1_bSearch_OnClick (Sender: string; var Cancel: boolean);
begin
    Form1.TableGrid1.dbFilter := 'Category <> 5';
end;



2. Сохранять и читать значение можно из реестра, пример

procedure Form1_OnShow (Sender: string; Action: string);
var
   reg: TRegistry;
begin
     reg := TRegistry.Create;
     reg.Access := KEY_ALL_ACCESS;
     reg.RootKey := HKEY_CURRENT_USER;
     reg.OpenKey('software\Your_project_have',true);
     if reg.ValueExists('CheckBox') then Form1.CheckBox1.Checked := reg.ReadBool('CheckBox');

     reg.CloseKey;
     reg.Free;
end;

procedure Form1_OnClose (Sender: string; Action: string);
var
   reg: TRegistry;
begin
     reg := TRegistry.Create;
     reg.Access := KEY_ALL_ACCESS;
     reg.RootKey := HKEY_CURRENT_USER;
     reg.OpenKey('software\Your_project_have',true);
     reg.WriteBool('CheckBox', Form1.CheckBox1.Checked);
     reg.CloseKey;
     reg.Free;
end;

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

2,932

(1 replies, posted in General)

It's not planned yet.

2,933

(7 replies, posted in Russian)

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


Просто представьте что событие OnClick это OnChange, т.к. событие OnClick срабатывает всегда, независимо от того, пользователь ли изменил его состояние, либо с помощью скрипта.


Используйте событие OnKeyUp и OnMouseUp чтобы отловить событие, когда именно пользователь изменяет состояние CheckBox-а

2,934

(1 replies, posted in General)

Hello.

http://myvisualdatabase.com/forum/viewtopic.php?id=3642

2,935

(7 replies, posted in General)

Please download latest beta version 3.7b
https://www.dropbox.com/s/eef9rf7u08k63 … b.zip?dl=0



An example:

2,936

(9 replies, posted in Russian)

Victor51ru wrote:

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

только если с помощью другой программы, например SQLite Studio.


Чем вызвана подобная необходимость?

collagen wrote:

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

Такая возможность не планируется.

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

2,939

(7 replies, posted in Russian)

collagen wrote:

А, собственно, не стоит ли для компонента Комбобокс прописать процедуру OnChange? При показе формы провожу проверку состояний КомбоБоксов с последующим переключением в нужное положение, а в результате получаю срабатывание по OnClick'у, хотя для него совсем другие планы...

Компонент ComboBox имеет событие OnChange, или возможно я не понял вопроса.

2,940

(9 replies, posted in Russian)

kovalenko
Видимо сканер кодов передает знак нажатияна Enter, что провоцирует автоматическое нажатие на кнопку "Сохранить запись". Установите для данной кнопки свойство Default = False

collagen wrote:

1. Передается ли внешний ключ в грид?
2. Как можно по выбраной записи в гриде (по внешнему ключу) вывести в открытую форму данные другой (связанной внешним ключом) таблицы?
3. Как относительно связки внешний ключ -> Label.Caption (только для чтения)?


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

SQLExecute('SELECT id_groups FROM person WHERE id='+Form1.GridSearch.sqlValue);

2. Думаю  примерно также, sql запросом, но не совсем понимаю вопроса, приведите пожалуйста конкретный пример с проектом.


3. Не понял вопроса.

Raspr

1. Можно так

ShowRecord(Form2, 'tablename', 1) ; // указываем форму для показа записи, имя таблицы в БД, идентификатор необходимой записи

2. идентификатор записи на форме хранится в кнопке с действием "Сохранить запись"

Form2.ButtonSave.dbGeneralTableId 

2,943

(36 replies, posted in Russian)

andrey.yugay
рассмотрите возможность логгирования данных более простым и универсальным способом:
http://myvisualdatabase.com/forum/viewtopic.php?id=3642

попробуйте так

Form1.TabSheet1.TabVisible := False;

Unfortunately I can't help you only with concrete and small questions.

2,946

(1 replies, posted in General)

Hello.


Example:

procedure frmEmployee_OnClose (Sender: string; Action: string);
var
    i,c: integer;
begin
    c := frmEmployee.ComponentCount-1;
    for i := 0 to c do
    begin
        if frmEmployee.Components[i] is TdbEdit then TdbEdit(frmEmployee.Components[i]).Clear;
        if frmEmployee.Components[i] is TdbMemo then TdbMemo(frmEmployee.Components[i]).Clear;
    end;
end;

2,947

(3 replies, posted in General)

Can you attach your project, because in my project I can't reproduce this error.

in table "EmployeeDB" you have calculate fields like this

(select count(id) from Deliverable where Deliverable.id_EmployeeDB = EmployeeDB.id and Deliverable.id_Software = Software.id) 
(select count(id) from Deliverable where Deliverable.id_EmployeeDB = EmployeeDB.id and Deliverable.id_Software = Software.id and Deliverable.id_BatchStatus = 1)
(select count(id) from Deliverable where Deliverable.id_EmployeeDB = EmployeeDB.id and Deliverable.id_Software = Software.id and Deliverable.id_BatchStatus = 2)

and so on...


there is mistake, I don't understand why you use a field "Software.id" in this calculate field.

можете написать exit;
пример

procedure frmSerials_OnShow (Sender: string; Action: string);
 var
   i,c,q: integer;
   s: string;
 begin
     exit;
     q := 0;
     c := frmSerials.TableGrid1.RowCount - 1;
...

2,950

(1 replies, posted in General)

Hello.


Info about DBFile:
http://myvisualdatabase.com/help_en/com … bfile.html


Set property Type = LinkFolder (Sets the method of working with files stored in the database, refer to the file, refer to the folder)



Work with a DBFile is no different from working with other standard components like Edit, Memo, etc.