Results 1 to 9 of 9

Thread: DatabaseQuery en DatabaseToCsv

  1. #1

    DatabaseQuery en DatabaseToCsv

    Hoi,

    Ooit heb ik voor eigen gebruik 2 simpele tooltjes ontwikkeld:

    DatabaseQuery en DatabaseToCsv.

    Ze laten toe op een snelle manier SQL queries te doen, zonder veel toeters en bellen weliswaar...

    De toolnamen zeggen al heel wat, maar toch een beetje uitleg:

    Beide tools kunnen een beperkt aantal soorten DB's aan:

    - MsAccess
    - MsExcel
    - MsSql
    - text (CSV)
    - MySql

    Met beide tools kunnen SQL queries naar de Database gestuurd worden.
    DatabaseQuery toont dan het resultaat in een stringgrid, DatabaseToCsv maakt van het resultaat een CSV file.
    Beiden kunnen tot 30 verschillende queries aan.
    DatabaseToCsv kan ook werken in batch mode (op te starten in bv een batchfile in de directory waar de query definities staan door toevoegen van "/a" aan het command).

    Iets extra voor beide tools:
    - er kunnen parameters gebruikt worden bv:

    Code:
    :Par1 = "blabla"
    ....
    Select ..
    where xx = :Par1
    ...
    De namen van de parameters in de SQL query worden gewoon vervangen door wat na het "=" teken staat (gewone tekstsubstitutie).

    - er kunnen files "geincluded" worden, bv:

    Code:
    Select ...
    where xxxx in
    (
    $I names.txt
    )
    ...
    Parameter namen beginnen altijd met ":" en moeten in kolom 1 beginnen,
    includestatements beginnen met "$I " en moeten ook in kolom 1 beginnen.

    Bovendien is het in DatabaseToCsv mogelijk ná het uitvoeren van de query een aantal "berekende" kolommen toe te voegen, zie de uitleg daarvan in "NLDRcsCsv".
    http://www.nldelphi.com/Forum/showthread.php?t=20074

    Voorbeeld van een querydefinitie in DatabaseToCsv:
    Code:
    NAME= DataFiles\Test1 Access
    DBTYPE= MSACCESS
    SERVER= 
    USER= 
    PASSWORD= 
    DATABASE= Metrics.mdb
    
    CALCULATEDFIELDS=
    CalcFieldA = (Count1 - 1.25) / Area1
    CalcFieldB = 100 + (Count2 % CountTotal)
    CalcFieldC = 20 * (CalcFieldA + CalcFieldB)
    
    QUERY=
    select * from [MeasurementsA]
    where Method = "Inspection"
    Let op de "XXXX=" regels die de verschillende velden definieren. "NAME" is de naam die de csv file zal krijgen (extensie niet meegeven, is altijd "txt").

    De CSV files die beide tools gebruiken (DatabaseQuery kan ook een queryresult als CSV file saven) gebruiken altijd als separator de "," (dus echt "comma" separated), de "." als decimal separator en "yyyy-mm-dd" als datum formaat. Even oppassen dus. Er wordt ook een Schema.ini file aangemaakt in de directory waar de csv file staat. Dat laat toe ook die directory als (text) database te gebruiken.

    De documentatie van "DatabaseToCsv" is nu ook toegevoegd in de link hieronder.
    Werken met "DatabaseQuery" zou duidelijk moeten zijn met de uitleg in deze thread.

    Veel plezier!

    De tools zijn te vinden op:
    ftp://ftp.nldelphi.com/public/OpenSo.../NLDDanyUtils/
    Last edited by Dany; 06-Aug-07 at 21:05.

  2. #2
    Nieuwe versie ingecheckt van DatabaseToCsv die in numerieke expressies (Calculated Fields) nu ook functie aanroepen aankan. Zie NLDRcsCsv of NLDSimpleEval voor meer uitleg daarover.
    De documentatie in de *.zip file is aangepast.

  3. #3
    DatabaseToCsv: De query definitie files kunnen nu meer dan 1 sql query bevatten. De verschillende queries moeten gescheiden zijn door puntkomma's.
    Zie de *.doc file voor meer details.

  4. #4
    Quote Originally Posted by Dany View Post
    DatabaseToCsv: De query definitie files kunnen nu meer dan 1 sql query bevatten
    Toevoeging daaraan: nu is het ook mogelijk parameters te definieren die ofwel voor de ganse definitie file gelden (dus voor alle queries erin) ofwel enkel voor 1 query definitie in die file. Zie de *.doc file voor meer details.

  5. #5
    Nieuwe versies ingecheckt van NLDDatabaseQuery en NLDDatabaseToCsv. De mogelijkheid bestaat nu om een CSV (voor het format zie "NLDRcsCsv") file in te lezen en in een database tabel te zetten met 1 (pseudo) SQL statement:
    Code:
    $L <csv file name> <table name>
    Zie de doc file van NLDDatabaseQuery.

  6. #6
    Nog iets toegevoegd in NLDDatabaseQuery en NLDDatabaseToCsv wat ikzelf heel handig vind: $like_in: een samenvoeging van "like" en "in".

    The “$like_in” pseudo sql statement.
    This pseudo statement is processed by some pre-processor in the tool (like parameter substitution is). It is the merging of 2 other SQL statements: “like” and “in”. The meaning is the following:

    Code:
    $like_in (exp1, exp2, exp3, expn...)
    is translated to
    Code:
    ((exp1 like exp2) or (exp1 like exp3) or (exp1 like expn) ...)
    before the SQL statements are sent to the database at hand.

    Constraint: the expressions exp1..expn can not contain commas themselves, and also nesting of $like_in statements is not allowed.

    Last edited by Dany; 04-Nov-07 at 14:42.

  7. #7
    Nog iets toegevoegd:

    The “$if_null” (or "$iif_null") pseudo sql statement.
    This pseudo statement is processed by some pre-processor in the tool (like parameter substitution is). It is capable of replacing a value X by another value if X is null. The meaning is the following:

    Code:
    $if_null (exp1, exp2)
    is translated to
    Code:
    if(expr1 is not null, expr1, expr2)
    before the SQL statements are sent to the database at hand.

    The equivalent for “iif” (like in MsAccess) is “iif_null”:
    Code:
    $iif_null (exp1, exp2)
    is translated to
    Code:
    iif(expr1 is not null, expr1, expr2)
    Constraint: the expressions can not contain commas themselves, and also nesting of $if_null (and $iif_null) statements is not allowed.

  8. #8
    Een fout verwijderd uit DatabaseToCsv in "Calculated Fields, DateToWeekNo".
    Vriendelijke groeten,
    Dany

  9. #9
    Vriendelijke groeten,
    Dany

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •