1

(35 replies, posted in General)

Does anybody know more about the company behind DataExpress? Is this another One Man Show or a company who will keep the product longer alive as MVD?


Before I take a look to this new Software I need more background information. I can not waste time to look at another One Man Show.


Sorry to be strict, but switching from MVD to Lazarus was time consumting and than switching to another mayfly will cost to much time and turnover to start thinking about.

2

(6 replies, posted in General)

Is he developing anything new?


Considering the technical development of windows, what will we do with MVD in a few years? Is he possibly interested in releasing the source code so that the community keeps MVD alive?

3

(35 replies, posted in General)

Any Weblink for DataExpress? I get only some unrelated advertises via google.

4

(4 replies, posted in General)

brian.zaballa wrote:
v_pozidis wrote:

Maby this one will help you..
http://myvisualdatabase.com/help_en/Databaseschema.html

I think he's asking on the third party software/library used by MVD to create DB diagram automatically.


Are you perhaps just looking for a library to be embedded to an application teco?

Or you just needed a tool? If so, then perhaps this list would be nice to try https://www.guru99.com/free-database-di … tools.html


I'm using Navicat Premium(this one's not on that list and is paid thou) on managing my databases and it can do this on its Reverse Database to Model. It also allows you to create a model, then sync it to database or export to sql, etc.

Navicat also has their Data Modeler w/ free version, the Essentials but with limited to just creating your model/diagram, then saving it to image or pdf. Exporting it to sql or connecting to database will need a subscription.


I am looking for a tool. Currently I am using MVD only to design a database and to check the design with the embedded ER Diagram.


I am working mostly offline on Database Design, so I can not use cloud solutions. I do not trust some hotel or public open wifi connections, etc. I am working currently only approx. 40% from my office. The other times i am working when I am traveling to customers, etc.


The ER Diagram is currently the only interesting point of MVD for me.

5

(4 replies, posted in General)

Hi to all,


Does anybody know which tool is included in MVD to show the Database Diagram? It looks like an ER Diagram and I could use such a tool.


If nobody knows, has anybody contact to Dmitry? Maybe he can answer the question (I have tried via support email but haven't got a response.


If somebody has a good alternative ER Diagram Designer he can also answwer here.


Open Source or Freeware prefered.


Thank you.

CDB wrote:

Thinking about how to make the connection secure, by which I take you mean the connection string is obfuscated in some way, I came up with the following idea. Not tested, so have no idea if it would work, and is probably more complicated than needs be! smile

1. Create a SQLite database that has just one table and for security about 5 fields.
..... Field 1 contains an encrypted form of the connection path details.
..... Field 2 ........   contains the encryption key spread across one or more fields, the other fields  contain dummy information and or the password
.

2. Before opening the SQL Server connection as demonstrated above, read in the SQLite database contents and perform the deincryption.

3. Parse the results into the actual  db_settings:='Provider=SQLOLEDB;Server=localhost;database=DatabaseName;UID=UserName;PWD=password';
 
To make it more secure, a function could be written that actually changes the encryption key (some sort of randomise function) each time the program is run, This could be placed on the MainForms OnClose event where the new encrypted path and key can be written back to the database. I assume the SQL Server DB would be disconnected at this point as well.

I've probably over thought this far more than is necessary, but if it worked, this idea could also be used for other settings in the ini file such as column widths in tablegrids etc.

The other option would be to have the encryption or password key in plain sight, but looking like an encrypted  string.

Only to prevent that your software will be unsafe and funny for security features. Not as "support".

Will not realy work
- .dcu file is a scripted code. Easy to reverse. even a full compiled .exe can be reveresd by some freeware reverser.
- encryption with RC5 has some issues with sqlite text storing. The character table is not constant utf, so it can happen that you can not decrypt what you have encrypted.
- it is allways a bad idea to store connection passwords in a sourcecode, ini file or database without a propper encryption and other safety elements.

Except script kiddis and beginner in programming others will break the security before breakfast just as a morning exercise.

Before you ask: MVD is abandon by the last statement of Dmitry. There are solutions possible, but I support only active compiler. Search for me in other forums and you will see how to make it. (have fun searching).

SQLExecute('PRAGMA foreign_keys = off ');

Try to place it here:


procedure Form1_bImport_OnClick (Sender: TObject; var Cancel: boolean);
begin
    OpenDialog := TOpenDialog.Create(Form1);   // Setup dialog to select the csv file to import. This should be one that was created by the export procedure
  OpenDialog.DefaultExt := 'csv';
  OpenDialog.Filter := 'CSV|*.csv';   // Only allow csv files
  OpenDialog.Options := ofOverwritePrompt+ofHideReadOnly+ofEnableSizing;
  Dups := 0;
  if OpenDialog.Execute then
   begin


         SQLExecute('PRAGMA foreign_keys = off ');


     ProgressBar := TProgressBar.Create(Form1);
     ProgressBar.Parent := Form1.pnProgressBar;
     ProgressBar.Width := Form1.pnProgressBar.Width;
     ProgressBar.Height := Form1.pnProgressBar.Height;
     ProgressBar.Position := 0;
     ProgressBar.Max := 10;
     Form1.pnProgressBar.Visible := True;
     Form1.lblImpExp.Caption := 'Importing Database';
     application.processmessages;
     ImportToSl(OpenDialog.FileName);  // Run Import procedure - Pass the csv filename to the procedure
     Form1.TableGrid1.dbUpdate;
     Form1.tgCompanies.dbUpdate;
     Form1.pnProgressBar.Visible := False;
     Form1.lblImpExp.Caption := '';
     ProgressBar.Free;
     ShowMessage('Import Finished.'+ '      Duplicates Not Imported: ' + IntToStr(Dups));


SQLExecute('PRAGMA foreign_keys = on ');


   end;
  OpenDialog.Free;
end;

Lines are added in bold



Hi all. According to the example import export project which does not include the foreign keys of the database,is there a way to include the foreign keys in the project?, so the while database could be export and import in and from a csv file

Foreign keys are generated by the database engine when you add/edit the table strucuture to keep the internal data structure intact and with integrity. You can not export them. They exist "virutal" as part of the internal structure information and internal check processing of SQL commands. They are enforced by the database engine. They are a kind of ruleset and not any kind of records.

You are using databases with references to other tables.


The export is catching the table names from the master table.


For export this is fine, because you can export table contant in any order without side effects - in theory.


In practise you must import records in a database with references between 'Master' and 'Slave' Tables in a strict top-down order.


This means first the origin tables where you later reference to and then the tables with the records who are using the - I like to call it 'Master' tables.


The script has the problem that this master-slave or top-down order with respecting the table references is not taken into account.


So the export from this script can not be imported. You would need to manual delete all references, import the records and then restablish the references. Alternative you need to change the export script from automatic catching the tables to a manual preset. In this preset you have to take into account the top down structure of your database.


Many work.


One of the reasons why I directly change the database structure before the main software starts.


A common problem with databasees who uses table references.


In other words: you have reach the limits of MVD. Without a manual script for the table updates it will be hard to work.


If you will not bear the costs of RAD Studio, take a look into Lazarus-IDE or Pilotlogic Code Typhoon. Both are Free Pascal with is mostly similar to the definition of Delphi 7, but with Unicode by default.


Dimtry should realy update MVD with a internal update process for database update in a running system.

k245 wrote:

All this is true, but you have to do double work: first change the structure of the database using the MVDB visual tools, and then write a SQL-script that will perform the same actions on the old version of the database for the end user. As a result, annoying mistakes happen. But if structure changes were logged in the format of SQL-commands, then this log could be used without fear that something was forgotten or missed.


That's true. But MVD was never anything else for me as a cheaper and stripped tool instead of Embarcadero RAD Studio.


But now Lazarus-IDE and Pilotlogic Code Typhoon have increased their functions and stability. Personal there is not much left to use MVD. Only sometimes to create fast prototypes for discussing a new project.


The company will not pay for a Enterprise License and was looking for something similar but cheaper. Now both Free Pascal IDE's have make the run.


For me personal Dimtry was to long away to keep MVD up to date and competitive with the other IDE's for Delphi/Free Pascal. Maybe there are some users left who like to create a application with less coding, but for people like me, the others are more futureproof and more flexible as MVD.


I am not so often here as in the past. It is for me a kind of slow farewell to MVD and journey to new adventures.

Unfortunately, in MVDB there is no way to record structure changes and save them as a SQL-script, so they can be used to automatically update the database structure. Therefore, your method is the only true one, I also use it.


If you can generate the sql statements for database alternation by yourself, you can add this in the scriptfile at the very end of the file. After all procedures/functions inside the final    begin    end    area.


This area is handled before the database is structural checked by MVD. After upgrading/changing you must restart your application to use the updated sql database.


This is the way I am doing it since many years without problem. Some additional infractructure in the dabase is required to catch the table information before altering.


Also I use this way to use the replaced sqlite.dll. My version has encryption included. Search the forum for more details on this and an example from Dimtry.   smile

11

(9 replies, posted in General)

Your source code is total messy and a perfect example who not to write source code.


If you would give me this quality of source code your would be fired.


- To many unneeded comments.
- No termination/exit point if action has been closed
- depended if then clauses where it is not needed
- unneeded repeats of if then


This is slow, full of possible malfunctions, crappy and against all common rules for writing source codes in Delphi or C++.


Simple rule: If you can not read it without comments, it is shit.
Read about "Clean Code" or read the MISRA Rules.


There are only two reasons for comments in a source code
- procedure/function header to inform about input and output parameters and there possible values
- a Line of //----------------------------  for optical separation of logical function parts in a procedure/function.


My Version:

pocedure frmEquip_OnShow (Sender: TObject; Action: string);
 
begin 
  if action = 'NewRecord' then 
  begin 
    frmEquip.EqSvcOverDue.Visible := false ; 
    frmEquip.GrpSvcBox.Visible := false ; 
  end;

  //---------------------------------------------------------
 
  if frmEquip.cboSpare.Text = 'Installed' then 
    frmEquip.GrpSvcBox.Visible := true 
  else 
    frmEquip.GrpSvcBox.Visible := false ;

  //---------------------------------------------------------

  if action = 'ShowRecord' then 
  begin 
    frmEquip.EqSvcOverDue.Visible := false ; 
    // showmessage('Equip OnShow, ShowRecord, EqSvcOverDue.Visible = false') ; // test 

    if frmEquip.cboSpare.Text <> 'Spare' then 
    begin 
      // showmessage('ShowRecord is NOT a SPARE') ; 
      // CHECK TO MAKE SURE THE DATE IS NOT BLANK 
  
     if frmEquip.NextSvcDate.Text <> '' then 
      begin 
        // showmessage('Equip OnShow, ShowRecord, NextSvDate not BLANK') ; 
        // CHECK FOR OVERDUE DATE 
      
        if StrToDate(frmEquip.NextSvcDate.Text) < Date then 
        begin 
          frmEquip.EqSvcOverDue.Visible := true ;
          frmEquip.EqSvcOverDue.Text := 'Overdue' ; 
          // showmessage('Overdue should be SET') ; 
          TableID := frmEquip.btnSave.dbGeneralTableId; 
        end; 
      
      end;

  //---------------------------------------------------------

      if frmEquip.cboSpare.Text = 'Installed' then 
      begin 
        frmEquip.btnPrintInstalled.Visible := true; 
        frmEquip.btnPrintSpare.Visible := false; 
      end; 
    
    end;

  //---------------------------------------------------------

    if frmEquip.cboSpare.Text = 'Spare' then 
    begin 
      frmEquip.btnPrintInstalled.Visible := false; 
      frmEquip.btnPrintSpare.Visible := true; 
      frmEquip.GrpSvcBox.Visible := false ; 
    end; 
  end;

  //---------------------------------------------------------

  TableID := frmEquip.btnSave.dbGeneralTableId; 
  if action = 'NewRecord' then 
    vNew := 'y' ; 
    
end;

12

(3 replies, posted in General)

Hello to all.


the included sqlite3.dll from MyVisualDatabase is from 2014.


In which folder can I place a newer version of this .dll that it will be copied to all compiled projects? After every compilation I get the old version back in the project folder.


An IT Newsletter has written that the newer versions of SQLITE have a speed improvement. More speed is a good thing.

MVD has a Pascal Script engine inside and is not a full featured compiler. Pascal Script is a a subset of Delph/Pascali and not complete Delphi/Pascal.


RAD Studio does not recognize Open Pascal. It uses Delphi. Open Pascal has some changed headers and functions. So both are not 100% compatible.


Open Pascal is mostly similar to Delphi 7 which is around 20 years old. Open Pascal 3.3 tries to come close to the current Delphi but is at the moment not stable enough for production use. More information at www.lazarus-ide.org or www.pilotlogic.com


For C++ you need another compiler like Dev C++ or Codeblock

14

(6 replies, posted in General)

The record selection is outside the report Writer. You need to select the records before you call the report writer.


You need to use the Report SQL function instead of the Report function. The Report SQL let you select which records should be printed. The other function prints all.

15

(12 replies, posted in General)

Can you post a copy of the license agreement. I can't find it on the webpage and at the program folder is no copy of this.


Thank you.

16

(6 replies, posted in General)

Don't do double posts. It' ugly.


AFIK MVD does not support inter process communication or communication via COM,or other API with other software, etc. and can not receive messages from other software.


In other words: Not supported. For this you would need a full featured compiler. MVD is based on Delphi which is large compatible with Free Pascal. Search around and you would find a cost efficient alternative with a full featured compiler.


When you want to do this you should be aware that you need to use scripts/source code and can not click you application together.

17

(1 replies, posted in General)

My Visual Database manages the table stucture with the file tables.ini


You can change with SQLite Expert Professional whatever you want. If it is not copied to tables.ini it will be ignored or corrected to the content of this file.


Whatever you want to change, if it is not possible inside My Visual Database you can not use it unless you write your own SQL Statements and manage everything with scripts. In other words you need to use My Visual Database as compiler editor with limited functions and limited expansion possibilities.


We will move all applications to Lazarus-IDE or Pilotlogic. For small internal applications you can use MVD, but not for large complex applications. The more or less open script.dcu file is a showstopper for us. We will not distribute internal programm logic to others, including competitors.

18

(6 replies, posted in SQL queries)

tcoton wrote:

GDPR is about personal privacy protection, so, as long as you cannot protect sufficiently personal data stored in SQLite, you should consider using MVDB with a MySQL database with all securities around the server as a solution to be GDPR compliant if you use it to store personal and private data. There is still the possibility to write parameterized statements using SQLite, look for prepared statement for SQLite, everything is in the method you use to code your application, you are the only one to be responsible for the safety of the data. MVDB is a framework to manipulate data, you should maybe read more about SQLite and MySQL to present something to auditors. If you use a lot of scripts, then you should read about Delphi to implement security in your SQL statements. Anyway, you can still try to inject the database to be sure!! Now, if the auditors are not able to read your script to detect possible SQL injection, then they should do another job, I don't know... blowing dust from server fans for example smile

Funny (the last part about doing another job) but irrelevant to the auditors. It's not just about personal data, it's about a security check.


GDPR means also privacy by design, which includes the development environement in our case. MVD uses not a complete delphi environement but a delphi script environement with limited delphi functionallity. When we would use RAD Studio or Lazarus or CodeTyphoon the situation would be clear for the audit. The application developer must use the unrestricted functionality accordingly.


The Delphi script is seen very clearly by the auditors. The manufacturer determines which safety functions are included or not. What is not listed in the documentation is not included and not possible.


The internal audit was in preperation for an official audit. We can close here. Audit has been finished at Aug. 31.


As far as I can tell, the following was criticized during the audit:
- "Compiled" scripts can be reverse engineered relatively easily because they are not binary compiled or encrypted but as a compressed script.
- Passwords in the scipts for database encryption are stored openly and not encrypted. So worthless because easy to read.
- The included RC5 encryption is faulty (conversion Ansi / UTF problem) and therefore cannot be used.
- Delivery with SQLite library without encryption.
- MySQL with full encrypted data storage is only possible in the enterprise version, not in the community. The note in the selection of the database engine is missing here (We don't use MySQL often so I can't confirm. Our other database servers have encryption included).


Besides, the auditors can read the scripts and recommend a 1: 1 implementation in RAD Studio or CodeTyphoon.

19

(6 replies, posted in SQL queries)

Hi Brian,

we use a lot of scripts in MVD.


Without any information from Dmitry, I have nothing to present the auditors.


Additional, without parameterized SQL Statements the auditors estimating that MVD is not GDPR compilant.


Any information from other Forum Users in EEA if MVD is GDPR compilant?


Thank you.

20

(6 replies, posted in SQL queries)

Hi to all,


we have had an internal audit and the question has come up if and how MyVisualDatabase supports SQL Injection Prevention.


Any Information about available? Anything included by design?


- Are Parameterized SQL Statements possible
- What happens when somebody enter, for example, as Password or search value items like      12345 or 1=1
- What happens when somebody enter, for example, as Username or search value items like     john; --


I haven't found in the forum or anywhere else at the webpage information about this which can be presented to the auditors.


Thank you for your help in advance.


teco049

21

(2 replies, posted in Script)

Thank you.

22

(2 replies, posted in Script)

Hi,


does anybody know if MyVisualDatabase support the Redim of an Array at runtime?


I need a dynamic array or I need to declare the maximum which is around 256k in this specific case.


Thank you.

23

(187 replies, posted in General)

K245

In the meantime, you can use the standard DLL mechanism to expand functionality.


Do you have an example how to use the standard DLL mechanism from MyVisualDatabase?

24

(3 replies, posted in General)

The problem is Next time i create another form (another ID etc...) the Changes on these buttons are still present.


Are you really creating a form for each record or do you mean simply storing the current record and reopen a form with clear fields?


Anyway, make a second procedure with the "Start setting" of the buttons and call it with the "on show" property of your form. To be sure, call it additional from the script or button (in this case maybe the on Click propery) when you store a record.


It is easier as the idea from CDB.

25

(3 replies, posted in General)

k245 wrote:

An alternative solution may be to use the reverse log display chronology. Then the last entry will be the first in the memo.

Well, I think when I ask a brick wall to move I would have more success as when I ask them to use a reverse log...


@derek:
Thank you for your help. I will try it on Monday.