(0 replies, posted in Talks about all)

A bit of a cheek, but I've found a defunct (since 2014)  RAD database environment mainly for Access called Chammer from Triniti-soft (website no longer exists) using Open Pascal.

The company or website is Bulgarian, and I'm wondering if any one has any knowledge of this software and if so if they have the help file.

The EXE file can be downloaded from Sourceforge https://sourceforge.net/projects/chammerpascal/- it looks quite advanced judging by the IDE and the amount of components it has built in.

I've tried the 'Way Back' machine but that just says

Unified centralized system for orders and exchange of documents - OMV Bulgaria Ltd

Gas station management system - ECO Bulgaria EAD

Specialized school feeding system - French Lycée

An open source application development environment based on open pascal - Chammer

Sales application for Windows Mobile and Linux

Development of extensions and Internet templates to CMS Drupal

Commercial extension (ABIS POS) of ERP Navision - Avenir Telecom EOOD

Integration of ABIS and SAP - OMV Bulgaria OOD

In order for our consultant to contact you and present the project in detail, click HERE.

If you have an idea and would like us to realize it together, fill out the following form: Application form - purpose: funding.

Like MVD it is a shame it is no longer supported.

You forgot the attachment.

sparrow wrote:

MySQL 8.0 supports a new authentication based on improved, stronger SHA256-based password methods.

How To Fix Error Or Custom Script In MVD ?

You can only change it by altering the MySQLsetup security to the legacy setting.


(4 replies, posted in General)

You might want it, but I think a little more information would be useful.

Есть ли разница в номерах версий MySQL? В более поздних выпусках v8 произошли изменения в аспектах безопасности движка. Двигатель Inno по памяти.

Is there a difference in the MySQL version numbers?  There was a change in the security aspects of the engine in the later v8 editions.

Inno engine from memory.


While I would personally read in the country code and then use CASE statements as I wrote above, I think you could do it another way.

First count the length of the string shDate for max_index.

Within a for loop, use dtFormat:= Pos(shDate, ' ')

Then use the loop index, as the position to

Insert(dtFormat, '/', loopIndex);

And perform a similar iteration for the time.

That seems a neater way to do it than my idea Sparrow.

Perhaps TCoton can let us know if that works for his project.

Naturally Sparrow I'm having difficulty getting my registry function to work, but I'll post my general idea.

Registry function.

function ReadReg(thekey, value: string): string;
  Rg: TRegistry;
  //Create the Object
  Rg := TRegistry.Create;
  with Rg do

   //False = no write ability

   if OpenKey(theKey, false) then
      if ValueExists(value) then
        //Read the value from the field
        Result := Readstring(value)       
        ShowMessage(The value + ' does not exists under ' + theKey);
      //opening the key 
        ShowMessage('Error opening key : ' + theKey);

  //for demo purposes  called by
     form1.label1.TagString := ReadReg('\SYSTEM\CurrentControlSet\Control\Nls\Locale', 'Default');

Then from the locale code held in TagString

Do the following SQL Query pseudo code as I can't get the above function to work)

CASE when TagString = 0809 then
       format  dddd/mm/yyyy 
       AS thedate
CASE   when TagString = (whatever the US code is) then
       format  mm/dddd/yyyy 
       AS thedate

That is my general idea.

Oh yes, the error the above code keeps throwing is 'Error opening key'. The key exists as I'm looking at in Regedit.

I don't think this is exactly possible using SQLite.

I think the only way to do what you want, is to use MVD to interrogate Windows for the locale code, and then use a SQL iif.... or CASE function to then select the required SQL strftime formatting function.

As an aside I think SQL Server can do what you want.


(23 replies, posted in Script)

sparrow wrote:

How do you like this?

I think Sparrow, where tcoton was having difficulty, was in trying to work out how to get an Image Click to do what a Button Click can do either by script or from the inbuilt functions for ShowRecord etc.

A trick you could try, is where you can get the ID save it to a 'form_name.tag' then it is available to you everywhere while that ID is needed.

Not tested, but  see if this works.

ChartLine.Series[0].linepen.color := clBlue;


(35 replies, posted in General)

teco049 wrote:

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


There is the possibility you need to change the Authentication method,  I have used v8.0 with MVD some time ago and I had to set the authentication method to the legacy type.

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

Difference in the time component between clicks?
Or one uses the true Julian calendar and the other uses Gregorian, despite it shouldn't


(8 replies, posted in General)

Another option, but not easy to use on a system using MS Exchange is a simple


A variation on the code in the previous post is below. This is aimed at sending an email on a corporate Outlook server system:

 Outlook := CreateOleObject('Outlook.Application');

    //vMailItem := Outlook.GetNamespace('MAPI');

    vMailItem := Outlook.CreateItem(olMailItem);
    vMailItem.Recipients.Add('RECIPIENT EMAIL ADDRESS HERE');
    vMailItem.Subject := 'What a wonderful test email';
    vMailItem.HTMLBody := sList.text; //   'This is a test --> how amazing';


(8 replies, posted in General)

geochrist wrote:


The email test.zip file does not contain any code!

I'm not sure what you mean that no code is in the zip file.

Below is code that works in Windows 10. I developed it on a Windows 10 PC.  Note Outlook can be temperamental  when using HTML, it may not always display correctly.

This takes information from a tablegrid and attempts to format it as a grid in an Outlook email. The text in red is all that is needed to actually use Outlook.  The MAILTO  line will work in any modern email client

procedure frmEmail_btnSendEmail_OnClick (Sender: TObject; var Cancel: boolean);
    olMAILITEM = 0;
    Outlook: Variant;
    vMailItem: variant;
    indx : integer;
    txt, propName: String;
         sList.Add('table, th, td {');
         sList.Add(' border: 1px solid #dddddd; text-align: left; padding: 8px');
         sList.Add('<tr><th>Part Number</th>'+ '<th>BSuite#</th>' + '<th>Description'+ '</th>'+'<th>Qty'+'</th>'+'<th>For'+'</th>'+'</tr>');

         for indx := 0 to frmEmail.tgEmailList.RowCount-1 do
            sList.Add('<tr><td>'+frmEmail.tgEmailList.Cells[0,indx] + '</td>' + '<td>' +frmEmail.tgEmailList.Cells[1,indx] +'</td>'+'<td>'+frmEmail.tgEmailList.Cells[2,indx]+'</td>'+'<td> x '+frmEmail.tgEmailList.Cells[3,indx]+'</td>'+'<td>'+frmEmail.tgEmailList.Cells[4,indx]+'</td></tr>');

        if frmEmail.cmbSupplierList.ItemIndex = -1 then
         messagebox('You have not selected an order to email. Please select a supplier', 'EMAILING ERROR',0)
          frmEmail.tgEmailList.dbPopUPMenu.Items.Find('Copy All').click;
          txt := ClipboardGet;
         [color=red]  [b]propName := 'https://schemas.microsoft.com/mapi/proptag/0x59020003';
           Outlook := CreateOleObject('Outlook.Application');
           vMailItem := Outlook.GetNamespace('MAPI');
           vMailItem := Outlook.CreateItem(olMailItem);
           vMailItem.Subject := frmEmail.cmbSupplierList.Text;
           vMailItem.HTMLBody := sList.text;
           OutLook.SetProperty(propName, EncodingFlag);

           openURL('mailto:'+frmEmail.cmbEmailAddress.Text+'?Subject='+frmEmail.cmbSupplierList.Text+' Order'+'&Body='+sList.text);




(2 replies, posted in Script)

Hi eserjbrujo,

Is your database installed on a mapped network drive, or your PC has gone to sleep and you've woken the PC up, and tried to access the database almost immediately?

I'm assuming you are using SQLite as the database.

I have had similar error messages when the database is installed on a mapped drive on a network and a cache scraper     program is running in the background. The other PCs only have to have a momentary disconnection from the mapped drive and the DB reports itself as locked.

I have posted this in the Russian section as well.

Konstantin - I've translated your 'Clear App' project into English if you are interested.

I haven't translated or updated the 'help' file though.

I should say, if anyone wants the translated version, they'll need to go through K245 to get it.

Константин - Я перевел ваш проект Clear App на английский язык, если вам интересно.

Я не переводил и не обновлял файл справки.

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

Константин - Я перевел ваш проект Clear App на английский язык, если вам интересно.

Я не переводил и не обновлял файл справки.

Konstantin - I've translated your 'Clear App' project into English if you are interested.

I haven't translated or updated the 'help' file though..

I read your article on Multibase idea.

You could make it multibase and objective database by possibly using either BOLD For Delphi (now open source and being very slowly updated, does work with Firedac) or Mormot which interfaces to most databases but internally uses Sqlite. Mormot probably does more than is ever needed,and has a steep learning curve if you need to get into server based databases REST etc.

If possible the DB adapter and basic object DB files could be compiled into a DLL file one for each of the supported databases, then the developer of myvisual multibase project could at DB table design time, select from a list of supported databases and the correct DLL is then referenced 'behind-the-scenes', the developer continues to design their database as with the current MVD.

I would suggest using a more recent version of a Pascal Script utility if keeping that idea in a revamped program.

Я прочитал вашу статью об идее Multibase.

Вы можете сделать его многобазовой и объективной базой данных, возможно, используя либо BOLD For Delphi (теперь с открытым исходным кодом и очень медленно обновляется, работает с Firedac), либо Mormot, который взаимодействует с большинством баз данных, но внутри использует Sqlite. Mormot, вероятно, делает больше, чем когда-либо необходимо, и у него крутая кривая обучения, если вам нужно попасть в серверные базы данных REST и т. Д.

Если возможно, файлы адаптера БД и базовые объектные файлы БД можно было бы скомпилировать в файл DLL, по одному для каждой из поддерживаемых баз данных, тогда разработчик проекта myvisual multibase мог бы во время проектирования таблицы БД выбрать из списка поддерживаемых баз данных и правильную DLL. затем упоминается «за кулисами», разработчик продолжает проектировать свою базу данных, как и в текущем MVD.

Я бы предложил использовать более новую версию утилиты Pascal Script, если сохраните эту идею в обновленной программе.


(5 replies, posted in Russian)

pavlenko.vladimir.v wrote:
SergeiE wrote:

Добрый день!

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

Вы можете использовать EncryptRC5(,) и DecryptRC5(,) , перед записью и чением данных

I tried that in a project a few years ago. I hit a problem - encrypt worked fine, but decrypt didn't work and just locked the SqLite database. For a reason I never got to the bottom of, the decrypt key applied provided a different result to the same key used for encryption.

Your value might vary.

unforgettable wrote:

In b.is_active, what is b?

b is an alias for the 'bookings' table.

The idea is, you don't have to keep writing the full name of a table (especially if it is a long name), it can be referred to either by a single letter or a shorter name.

It is declared in the line bookings AS b.

Attaching the file will be helpful as mentioned by Derek, but in the meantime, it might be worth checking your antivirus or firewall is not preventing the program from opening correctly.

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.