Un install DMC
Run these TWO cleaners
Install DMC and during the installation process use the SAME folders for BOTH app and data
For example c:\cgf\data management or d:\cgf\data management (or any other ROOT folder)
Et voila
First I’d HIGHLY recommend NOT using the UAC compatible paths as they DO create timing “problems” even if the data is kept under user folders under W7 mainly.
(see here if you want to uninstall and reinstall using the same folders)
Use for example c:\cgf\data management or d:\cgf\data management (or any ROOT folder) for BOTH the app and data paths in the installer.
Install version 2 using these settings
Run DMC version2 (and request a serial if need be)
Navigate to your APP folder (c:\cgf\data management) and RENAME “data management” to “data management_v2″ then CREATE a folder named “data management” and leave it empty
Install DMC version 3 – the installer will install in xxx\data management
Run DMC version 3
When you want to switch back to version2 – rename your folders
Et voila
Using a TPS encrypted table or obfuscating your code on SQL queries :
If the SQL query or connection string OR the normal TPS (NOT DAT) encrypted password (not the new c7 “thing”) is well and properly “hidden” inside the application (exe or data.dll) then good luck to the guys wanting to hack it
The main difference here is that is is NOT possible (except if you write such a program which is NOT an easy task) here to use BRUTE FORCE (ie loop on “possibilities” and try to open the file) – it would need a restart of your “reading” software for each new “password possibility” …. time … money (again)
BUT remember also that All is possible – all depends on the amount of TIME the hacker is ready to invest to crack the password.
I’d say use a TPS encrypted BUT be “intelligent” when you store the password :
1. do NOT use in DCT a declared pwd
2. do NOT use a DCT variable and then a (plain) STRING primed in code because that will show in the exe
3. use a DCT var and a COMBINATION of LONG and STRING to BUILD the pwd in code
You must know that this “shows” in the exe opened in any HEX editor :
MyString = ‘MyPassword” <– MyPassword will be visible in HEX
MyLong = 19032012 <– 19032012 will be visible in HEX
Use this type of coding convention instead :
MyString = VAL(‘M’) & VAL(‘y’) & VAL(P’) etc ….
To go even further you can use this technique and this type of code
This is my main password creation procedure :
! ————————- Start Procedure ————————- !
ctDMC_MAIN.FillValues_Defaults PROCEDURE
CODE
IF DMC_SC_V:L_A = 0 OR Char_Driver1 = ” OR Char_Driver2 = ”
R# = 5
A# = 5
CLEAR(DMC_SC_Values)
DMC_SC_V:L_A = VAL(‘a’) – R# + A#
DMC_SC_V:L_B = VAL(‘b’) – R# + A#
DMC_SC_V:L_C = VAL(‘c’) – R# + A#
DMC_SC_V:L_D = VAL(‘d’) – R# + A#
DMC_SC_V:L_E = VAL(‘e’) – R# + A#
DMC_SC_V:L_F = VAL(‘f’) – R# + A#
DMC_SC_V:L_G = VAL(‘g’) – R# + A#
DMC_SC_V:L_H = VAL(‘h’) – R# + A#
DMC_SC_V:L_I = VAL(‘i’) – R# + A#
DMC_SC_V:L_J = VAL(‘j’) – R# + A#
DMC_SC_V:L_K = VAL(‘k’) – R# + A#
DMC_SC_V:L_L = VAL(‘l’) – R# + A#
DMC_SC_V:L_M = VAL(‘m’) – R# + A#
DMC_SC_V:L_N = VAL(‘n’) – R# + A#
DMC_SC_V:L_O = VAL(‘o’) – R# + A#
DMC_SC_V:L_P = VAL(‘p’) – R# + A#
DMC_SC_V:L_Q = VAL(‘q’) – R# + A#
DMC_SC_V:L_R = VAL(‘r’) – R# + A#
DMC_SC_V:L_S = VAL(‘s’) – R# + A#
DMC_SC_V:L_T = VAL(‘t’) – R# + A#
DMC_SC_V:L_U = VAL(‘u’) – R# + A#
DMC_SC_V:L_V = VAL(‘v’) – R# + A#
DMC_SC_V:L_W = VAL(‘w’) – R# + A#
DMC_SC_V:L_X = VAL(‘x’) – R# + A#
DMC_SC_V:L_Y = VAL(‘y’) – R# + A#
DMC_SC_V:L_Z = VAL(‘z’) – R# + A#
DMC_SC_V:L_AC = VAL(‘A’) – R# + A#
DMC_SC_V:L_BC = VAL(‘B’) – R# + A#
DMC_SC_V:L_CC = VAL(‘C’) – R# + A#
DMC_SC_V:L_DC = VAL(‘D’) – R# + A#
DMC_SC_V:L_EC = VAL(‘E’) – R# + A#
DMC_SC_V:L_FC = VAL(‘F’) – R# + A#
DMC_SC_V:L_GC = VAL(‘G’) – R# + A#
DMC_SC_V:L_HC = VAL(‘H’) – R# + A#
DMC_SC_V:L_IC = VAL(‘I’) – R# + A#
DMC_SC_V:L_JC = VAL(‘J’) – R# + A#
DMC_SC_V:L_KC = VAL(‘K’) – R# + A#
DMC_SC_V:L_LC = VAL(‘L’) – R# + A#
DMC_SC_V:L_MC = VAL(‘M’) – R# + A#
DMC_SC_V:L_NC = VAL(‘N’) – R# + A#
DMC_SC_V:L_OC = VAL(‘O’) – R# + A#
DMC_SC_V:L_PC = VAL(‘P’) – R# + A#
DMC_SC_V:L_QC = VAL(‘Q’) – R# + A#
DMC_SC_V:L_RC = VAL(‘R’) – R# + A#
DMC_SC_V:L_SC = VAL(‘S’) – R# + A#
DMC_SC_V:L_TC = VAL(‘T’) – R# + A#
DMC_SC_V:L_UC = VAL(‘U’) – R# + A#
DMC_SC_V:L_VC = VAL(‘V’) – R# + A#
DMC_SC_V:L_WC = VAL(‘W’) – R# + A#
DMC_SC_V:L_XC = VAL(‘X’) – R# + A#
DMC_SC_V:L_YC = VAL(‘Y’) – R# + A#
DMC_SC_V:L_ZC = VAL(‘Z’) – R# + A#
Char_A = CHR(DMC_SC_V:L_A)
Char_B = CHR(DMC_SC_V:L_B)
Char_C = CHR(DMC_SC_V:L_C)
Char_D = CHR(DMC_SC_V:L_D)
Char_E = CHR(DMC_SC_V:L_E)
Char_F = CHR(DMC_SC_V:L_F)
Char_G = CHR(DMC_SC_V:L_G)
Char_H = CHR(DMC_SC_V:L_H)
Char_I = CHR(DMC_SC_V:L_I)
Char_J = CHR(DMC_SC_V:L_J)
Char_K = CHR(DMC_SC_V:L_K)
Char_L = CHR(DMC_SC_V:L_L)
Char_M = CHR(DMC_SC_V:L_M)
Char_N = CHR(DMC_SC_V:L_N)
Char_O = CHR(DMC_SC_V:L_O)
Char_P = CHR(DMC_SC_V:L_P)
Char_Q = CHR(DMC_SC_V:L_Q)
Char_R = CHR(DMC_SC_V:L_R)
Char_S = CHR(DMC_SC_V:L_S)
Char_T = CHR(DMC_SC_V:L_T)
Char_U = CHR(DMC_SC_V:L_U)
Char_V = CHR(DMC_SC_V:L_V)
Char_W = CHR(DMC_SC_V:L_W)
Char_X = CHR(DMC_SC_V:L_X)
Char_Y = CHR(DMC_SC_V:L_Y)
Char_Z = CHR(DMC_SC_V:L_Z)
Char_AC = CHR(DMC_SC_V:L_AC)
Char_BC = CHR(DMC_SC_V:L_BC)
Char_CC = CHR(DMC_SC_V:L_CC)
Char_DC = CHR(DMC_SC_V:L_DC)
Char_EC = CHR(DMC_SC_V:L_EC)
Char_FC = CHR(DMC_SC_V:L_FC)
Char_GC = CHR(DMC_SC_V:L_GC)
Char_HC = CHR(DMC_SC_V:L_HC)
Char_IC = CHR(DMC_SC_V:L_IC)
Char_JC = CHR(DMC_SC_V:L_JC)
Char_KC = CHR(DMC_SC_V:L_KC)
Char_LC = CHR(DMC_SC_V:L_LC)
Char_MC = CHR(DMC_SC_V:L_MC)
Char_NC = CHR(DMC_SC_V:L_NC)
Char_OC = CHR(DMC_SC_V:L_OC)
Char_PC = CHR(DMC_SC_V:L_PC)
Char_QC = CHR(DMC_SC_V:L_QC)
Char_RC = CHR(DMC_SC_V:L_RC)
Char_SC = CHR(DMC_SC_V:L_SC)
Char_TC = CHR(DMC_SC_V:L_TC)
Char_UC = CHR(DMC_SC_V:L_UC)
Char_VC = CHR(DMC_SC_V:L_VC)
Char_WC = CHR(DMC_SC_V:L_WC)
Char_XC = CHR(DMC_SC_V:L_XC)
Char_YC = CHR(DMC_SC_V:L_YC)
Char_ZC = CHR(DMC_SC_V:L_ZC)
Char_Driver1 = ‘MySQL ODBC’
Char_Driver2 = ’3.51 Driver’
END
! ————————– End Procedure ————————– !
which means that in code you will use for example this :
GLO:Connection = Char_D & Char_R & Char_I & Char_V & Char_E & Char_R & ‘=’ & DMC_SQLP:DRIVER_1 & ‘ ‘ & DMC_SQLP:DRIVER_2 & ‘;’ |
& Char_S & Char_E & Char_R & Char_V & Char_E & Char_R & ‘=’ & DMC_SQLP:IP_1 & ‘.’ & DMC_SQLP:IP_2 & ‘.’ & DMC_SQLP:IP_3 & ‘.’ & DMC_SQLP:IP_4 & ‘;’ |
& Char_U & Char_S & Char_E & Char_R & ‘=’ & DMC_SQLP:USER_1 & ‘_’ & DMC_SQLP:USER_2 & ‘;’ |
& Char_P & Char_W & Char_D & ‘=’ & DMC_SQLP:PWD_1 & DMC_SQLP:PWD_2 & DMC_SQLP:PWD_3 & ‘;’ |
& Char_D & Char_A & Char_T & Char_A & Char_B & Char_A & Char_S & Char_E & ‘=’ & DMC_SQLP:DB_1 & ‘_’ & DMC_SQLP:DB_2 & ‘;’ |
& Char_P & Char_O & Char_R & Char_T & ‘=’ & 3306 & ‘;’
as you can “read” from this it “comes to ” this (the server and driver portions are also “split in “portions”) :
Driver=xxxxxxxxxxx;server=xxxxxxxxxxxx;uid=xxxxxx;pwd=xxxxxxxxxx;database=xxxxxxxxxx;port=xxxx;
which is what clarion awaits BUT when openeing the exe in HEX NOTHING is VISIBLE
Another technique is to use calculations to “create” your “long” portion of a password :
2515 can be stored as
MyPassword = 5*5 & 3*5 (into a string)
Do the same for your TPS passwords and your SQL queries and you can start sleeping soundly!
JP
1. Browse a local tps on Personne or Customer tables
2. Browse a distant sql table on Personne or Customer
The structures are identical
You have an Option with RADIO buttons to select :
1. Distant MsSQL
2. Distant MySQL
3. Distant PostgreSQL
This enables you to switch from any sql server to another simply by selecting the proper “falvor” dynamicaly
If you select (any) sql distant “Personne” table and open any record (update form) you will see two buttons and lists :
1. perform an sql query on the same table
2. perform an sql query on another table (table Customers)
The two lists will be updated for you
All the code is there for you to see HowToDo all this in clarion and sql language using the “dummy table” technique
Enjoy
www.dmc-fr.com/programme/dmcsqldemoc6.zip
www.dmc-fr.com/programme/dmcsqldemoc7.zip
all source code with APP DCT & TXA TPS files and running exe
I discovered today we can disconnect from an SQL dataBase (even if only connected through a DummyTable SHARE or OPEN(File) then a CLOSE(File) with this type of code :
!———————————————————-!
! Disconnect(STRING sConnection) !,BYTE
!———————————————————-!
cDMC_SQL.Disconnect PROCEDURE(STRING sConnection) !,BYTE
fSQL FILE,DRIVER(‘ODBC’,'/TURBOSQL=TRUE’),PRE(ODBC),BINDABLE,THREAD
Record RECORD
END ! record
END ! file
eMethodName EQUATE(‘.Disconnect ‘)
bErrorLevel BYTE
CODE
? SELF.Trace(eMethodName)
LOOP 1 TIMES
bErrorLevel = LEVEL:Benign
SELF.SetConnectString()
fSQL{PROP:Owner} = sConnection
CLOSE(fSQL)
SHARE(fSQL)
IF ERRORCODE() AND ERRORCODE() <> 52
bErrorLevel = SELF.SetLastError(‘An error occurred opening the SQL file. The error is: ‘ & |
ERRORCODE() & ‘ – ‘ & CLIP(ERROR()) & |
‘<13,10>’ & |
FILEERRORCODE() & ‘ – ‘ & CLIP(FILEERROR()))
BREAK
END ! if
CLOSE(fSQL)
fSQL{PROP:Disconnect} ! This clarion command does it all ————————————————— !
IF ERRORCODE()
bErrorLevel = SELF.SetLastError(fSQL)
BREAK
END ! if
END
? SELF.Trace(eMethodName & ‘Done’)
RETURN bErrorLevel
This allows you to entirely disconnect from ANY DataBase simply by passing the ConnectionString
JP
Or adding a column or deleting a key etc ….
Anything can be done very easily with the dummy table technique :
In DATA section of a source procedure (for example) add this Dummytable Structure
fListTablesSQL FILE,DRIVER(‘ODBC’,'/TURBOSQL=TRUE’),PRE(fListTablesSQL),BINDABLE,THREAD
Record RECORD
Table_Query STRING(2048)
END ! record
END ! file
In CODE section use this code (for example to CREATE a table) :
fListTablesSQL{PROP:Owner} = SELF.szConnectString ! your connection string here
! example of MsSQL connection string :
!Driver=SQL Server Native Client 10.0;server=xxx.xxx.xxx.xxx\SQLExpress2008R2;uid=sa;pwd=xxxxxxxx@;database=dmc_demo;
! This example is for sql 2008 on a distant server – thus the IP
! if on a localhost replace the IP with the WINDOWS machine name
SHARE(fListTablesSQL)
szSQLViews = ‘CREATE TABLE [dbo].[AnimalsTest] ( [ANIMALID] int NOT NULL );’
fListTablesSQL{PROP:SQL} = szSQLViews
! NEXT(fListTablesSQL) – this NEXT command is NOT needed except if you are using a LOOP statement to receive infos
CLOSE(fListTablesSQL)
That is all there is to it
IMPORTANT : when “sending” queries this dummy table structure will do
when “receiving infos” (querying the server) – then the dummy table structure MUST MATCH perfectly the infos the SERVER will send you on column data types and the order of the columns
some use a completely dumb <g> dummy table for 10/20/30 strings and then do some high level acrobatics to match cols …. I prefer in code creating a NEW dummy table where the structure MATCHES the result I expect
Enjoy
The DMC Software Recommendation Plan is a comprehensive program that allows existing registered DMC users to extend their protection period with FREE Software Maintenance.
All DMC licence holders with a valid current SMP can participate in the Software Recommendation Plan in 2 simple steps :
1. Recommend DMC to a friend.
2. Ask him to mention your NAME in the onsite “Message box” on the payment page when he order’s DMC.
You will receive a FREE extension period of SIX MONTHS and save from 60 USD to 75 USD
(this applies to NEW purchases of DMC Enterprise or Runtime Engine ONLY)
Extended Protection Period:
The protection period you win will be ADDED to your existing Software Maintenance Plan.
For each purchase of DMC done on your recommendation your protection period will be extended accordingly.
Each time you recommend DMC to a friend you lower your cost of Software Maintenance Plan.
We are pleased to introduce today a NEW way of purchasing DMC :
________________________________________
Software Maintenance Plan is a new “pricing policy” launched in January 2012.
Software Maintenance Plan is a subscription service added to your existing license and current SMP, whereas an upgrade license is a one off (allowing you to renew your expired old MP or SMP for 1 year).
Software Maintenance is bought on a yearly basis and once bought, customers will be protected for all upgrades on any release, as well as enjoying our priority email support.
Upgrade License is for customers who did not subscribe to our software maintenance plan or who let their old MP or SMP expire but want to upgrade their license to the latest release and also enjoy a 1year SMP.
The upgrade license price is 50% of the new license price, whereas for Software Maintenance Plan it is as low as 25% of the license price.
________________________________________
To renew your software maintenance subscription, please login to our Customer Center and click on “Renewal” under the Product Summary section.
To see all these new prices please visit this page. As a comparison with the old prices : the Enterprise level 1 year renewal is lowered by 20 % (saving you nearly 30$) and the Runtime Engine one is at the same price (unchanged since over 18 months)!
Please kindly be reminded that renewal of Software Maintenance subscription cannot be done after the expiry date. **
** : an “extension delay” of 15 days is allowed onsite after your actual expiration date. This provides a bit of flexibility where a person might be on vacation or away when the renewal is due.
What’s included in the Maintenance Plan?
• All Major/Minor Software Release and bug fix releases that are released during the protection period.
• Priority Email Technical Support (support@dmc-fr.com): DMC’s professionals will respond within 1-2 business days during APAC business hours (Monday – Friday, 9am – 7pm GMT+1).
• Live Chat Skype Support : DMC’s professionals are present to help you throughout the APAC business hours (Monday – Friday, 9am – 7pm GMT+1).
• Remote Desktop connection to your machine (Team Viewer) (limited to 30 minutes) to help you sort out any problem you may have with DMC during the APAC business hours (Monday – Friday, 9am – 7pm GMT+1).
Is the subscription to Maintenance Plan mandatory?
Subscription to our software maintenance is not mandatory. However, we do ask for your consideration as subscribing to the Software Maintenance Plan not only allows you to receive priority email and skype support or Remote Desktop connection support, but also help you saving your cost on acquiring the latest version of DMC. An Upgrade License of DMC costs 50% of the product price, while price of Software Maintenance is as low as 25% of the product price, allowing you to get free major/minor software release without any additional cost.
For more information about DMC Software Maintenance Plan and FAQs, please visit our DMC Software Maintenance Plan page.
Thank you for choosing DMC!
For all who are “into” clarion7/8 :
I had to change my motherboard as it was starting to show signs of weakness (LAN connectors)
I had a supermicro dual opteron dual cores with 2×2.8 ghz. cpu’s and 16 gb ram ddr2 at 667.
I changed it for an asus motherboard with one Intel cpu 4×3.4 ghz. and again 16 gb ram but ddr3 at 1333.
(same HD “chain with the areca controller card and my 12 raptors in raid6)
1. Opening my app takes LESS time and is quasi instantanuous
2. Reading AND storing ABC files (whatever is done during this time) is down to UNDER 4 seconds when it took around 11 seconds on the old motherboard.
3. Compiling the entire application takes roughly HALF as long as it did on the old motherboard
This confirms what I have always thought and said : clarion 7/8 is VERY “ressource” demanding, so the faster your
CPU
RAM
are the faster you will be able to work
For me now it becomes more of a pleasure to use clarion8
EVEN code completion and parsing can NOW be turned ON
My main procedure is still slightly noticable the first time I enter it whil it builds the PWEE but it is then absolutely “usable” whereas it was NOT with the old motherboard (and RAM)
My conclusion is simple : if you do not have the latest and fastest RAM and CPU ….. well I lived hapily with it for two years
In DMC SQL settings select and define your destination folder
(this is where DMC will copy the necessary files for you to use as a “new” folder for your SQL application)
Both DCT (created from generated DCTX) and generated TXA’s) should be in the same folder (your “destination” folder) and are copied there for you by DMC
Do not create an empty app to import the generated TXA
1. From Start Page click on “New solution”
2. Select Clarion for Windows
3. Select “Application from TXA”
4. Location is the folder containing the DCT and the generated TXA
5. Name is what you want it to be
6. Do NOT check the “Auto create project subdir”
7. When prompted for a TXA select the DMC generated one

Categories
Tag Cloud
Blog RSS
Comments RSS
Last 50 Posts
Back
Back
Void « Default
Life
Earth
Wind
Water
Fire
Light 