Alaska Xbase++ To PostgreSQL (Part 2)
Alaska Xbase++ To PostgreSQL (Part 2)
Alaska Xbase++
DBF to PostgreSQL database application
(PART 2)
DBF file to SQL script file
20.10.2023
UVOD
INTODUCTION
This is a service program for performing the operation of switching from the DBF
database to the postgreSQL database - with the transfer of data from the DBF database
to the postgreSQL database. This program is executed only once and never again. When
the DBF files, which make up the DBF database, are transformed into postgreSQL tables
in one of the postgreSQL databases, this is no longer repeated. However, downloading
data from DBF files to postgreSQL tables can be done later and during the entire life
of the postgreSQL database.
So, this program helps the developer and user of the program to make the transition
from Alaska Xbase++ DBF database application to Alaska Xbase++ SQL database
application.
[PROJECT]
COMPILE = xpp
COMPILE_FLAGS = -q
DEBUG = no
GUI = yes
LINKER = alink
LINK_FLAGS =
RC_COMPILE = arc
RC_FLAGS = -v
OBJ_DIR = __________C-DBF2SQLFILE.EXE
C-DBF2SQLFILE.XPJ
[C-DBF2SQLFILE.XPJ]
C-DBF2SQLFILE.EXE
[C-DBF2SQLFILE.EXE]
// $START-AUTODEPEND
// $STOP-AUTODEPEND
(RES)\C-DBF2SQLFILE.RES
dclipx.lib // eXpress++
XBTBASE1.LIB // XbToolsIII
XBTBASE2.LIB // XbToolsIII
//--------------------
// C-DBF2SQLFILE.INI
//--------------------
(C-DBF2SQLFILE)\C-DBF2SQLFILE.PRG // main
(C-DBF2SQLFILE)\DBF_FOLDER.PRG
(C-DBF2SQLFILE)\DBF_TO_POSTGRESQL_SQLSCRIPT.PRG
(C-DBF2SQLFILE)\DBF_INIEDIT.PRG
[COBA Systems]
[DATABASE]
work_database=POSTGRESQL
work_dir=SQL
[POSTGRESQL]
C-DBF2SQLFILE.PRG
//////////////////////////////////////////////////////////////////////////
// //
// //
// C-DBF2SQLFILE.PRG
// //
// 23-10-2023 //
// //
// www.cobasystems.com --- COBA Systems --- Slobodan Stanojević Coba //
// Open Source Project BAST Business Account Software Technology //
// www.Alaska-Software.com --- Alaska Xbase++ version 2.0.1503 //
// www.Donnay-software.com --- eXpress++ version 2.0.268 //
// SAP --- Advantage Database Server ADS version 10.10.0.49 //
// Sergej Spirin --- FastReport for Xbase++ version 27.03.2015 //
// //
// //
//////////////////////////////////////////////////////////////////////////
#include "Appevent.ch"
#include "Common.ch"
#include "Xbp.ch"
#include "xbtsys.ch"
#INCLUDE "DCDIALOG.CH"
*****************************************************************************
PROCEDURE APPSYS()
*****************************************************************************
RETURN
*****************************************************************************
PROCEDURE MAIN(xffx)
*****************************************************************************
* xffx = DBF file name
Q := RUN_STOP("GUI") // bazne.dll
nOldIcon := DC_ICONDEFAULT(1)
PUBLIC KORISNIK := 0
SET CHARSET TO ANSI
DC_DotHotKey(180) // DotPrompt Alt+D -> chr(180)
SetCancel(.F.) // turn off Alt+C
PUBLIC EXEnaziv := "DBF-TO-SQL-SCRIPT"
IF FILE(gde_exe()+"\SQL","D")=.F.
dirmake( gde_exe()+"\SQL" )
ENDIF
*************************
sql_database_parameters() // here
*************************
* PUBLIC work_database, work_user,
* work_pass, work_data, work_sema
*******************
DRAG_AND_DROP(xffx) // here
*******************
RETURN
**************************************************************************
FUNCTION DRAG_AND_DROP(xffx)
**************************************************************************
* xffx = DBF file name
LOCAL radno:=SELECT()
LOCAL GetList := {}, oFileName, oBrowse, oDlg, GetOptions, oMsgBox
LOCAL tsize := 55
LOCAL bsize := tsize/5
PRIVATE co0,co1,co2,co3,co4,of1,of2,of3,of4,aCUR,oCUR
I2018(@co0,@co1,@co2,@co3,@co4,@of1,@of2,@of3,@of4,@aCUR,@oCUR) // baznex.dll
RESTART:=.F.
*********************************************************************
@ 10+3,2 DCTOOLBAR oToolBar SIZE tsize,3 BUTTONSIZE bsize,3
*********************************************************************
PRIVATE aa:={}
//-------------------- SELECT
//--------------------
//-------------------- MAKE
//--------------------
//-------------------- CONFIG
//--------------------
//-------------------- HELP
// DCADDBUTTON CAPTION " " PARENT oToolbar SIZE (bsize*6.5) HIDE {||.T.}
//-------------------- EXIT
IF RESTART = .T.
***************
MAIN(xffx)
***************
ENDIF
RETURN NIL
SELECT(radno)
RETURN NIL
*************************************************************************
FUNCTION cStr()
*************************************************************************
* iz main():
* PUBLIC cstr
* PUBLIC cFile := "C\DATABASE\customer.dbf" // dbf file path
cDBFpath := lower(cFile)
PUBLIC ;
cStr := ;
chr(13)+;
"Transfer Alaska Xbase++ DBF files to SQL scripts for creating SQL
tables"+chr(13)+chr(13)+;
"From DBF file:"+chr(13)+;
" "+cDBFpath+chr(13)+chr(13)+;
"files are created:"+chr(13)+;
" "+cSQLpath+chr(13)+;
" "+cTXTpath
RETURN cStr
*************************************************************************
FUNCTION USER_PASS()
*************************************************************************
* is used from: DBF_TO_POSTGRESQL_SQLSCRIPT.PRG
PUBLIC user, pass, data
**************************
sql_database_parameters() // here
**************************
user:=alltrim(work_user)
pass:=alltrim(work_pass)
data:=UPPER(work_data)
RETURN NIL
*************************************************************************
FUNCTION sql_database_parameters()
*************************************************************************
* sql_database_parameters()
* PUBLIC work_database, work_user,
* work_pass, work_data, work_db, work_sema
PUBLIC ;
work_database := "POSTGRESQL" ,; // ili "ORACLE" za koju bazu podataka se pravi SQL script
work_user := "postgres" ,; // username za bazu podataka
work_pass := "coba" ,; // password za bazu podataka
work_data := "YES DATA" ,; // work_data="YES DATA" prenesi tablu i podatke, "NO DATA"
prenesi smo tablu
work_db := "test" ,; // naziv baze podataka
work_sema := "public" ,; // naziv scheme iz baze podataka
//------------------------------------------------------------------
work_database := INI_READ("C","DATABASE","work_database",ini)
IF empty(work_database)
* work_database = "ORACLE" ili "POSTGRESQL"
INI_WRITE("C","DATABASE","work_database","POSTGRESQL",ini)
work_database := INI_READ("C","DATABASE","work_database",ini)
ENDIF
IF empty( INI_READ("C","DATABASE","work_dir",ini) )
INI_WRITE("C","DATABASE","work_dir","SQL",ini)
ENDIF
//------------------------------------------------------------------
//------------------------------------------------------------------
IF empty( INI_READ("C","POSTGRESQL","work_user",ini) )
INI_WRITE("C","POSTGRESQL","work_user","postgres",ini)
ENDIF
IF empty( INI_READ("C","POSTGRESQL","work_pass",ini) )
INI_WRITE("C","POSTGRESQL","work_pass","coba",ini)
ENDIF
IF empty( INI_READ("C","POSTGRESQL","work_data",ini) )
INI_WRITE("C","POSTGRESQL","work_data","YES DATA",ini)
ENDIF
IF empty( INI_READ("C","POSTGRESQL","work_db",ini) )
INI_WRITE("C","POSTGRESQL","work_db","test",ini)
ENDIF
IF empty( INI_READ("C","POSTGRESQL","work_sema",ini) )
INI_WRITE("C","POSTGRESQL","work_sema","public",ini)
ENDIF
//------------------------------------------------------------------
work_user := INI_READ("C","POSTGRESQL","work_user",ini)
work_pass := INI_READ("C","POSTGRESQL","work_pass",ini)
work_data := INI_READ("C","POSTGRESQL","work_data",ini)
work_db := INI_READ("C","POSTGRESQL","work_db" ,ini)
work_sema := INI_READ("C","POSTGRESQL","work_sema",ini)
RETURN NIL
***************************************************************************
STATIC FUNCTION help_programa()
***************************************************************************
LOCAL txt := "", cr := chr(13)+chr(10)
&program
Primer:
'customer.dbf'
'customer.txt'
'customer.sql'
Upotreba:
customer.txt
------------
__tab__create__all.prg
u funkciju:
__tab__create_all()
customer.sql
------------
\SQL
Note:
CUSTOMERS_REGISTER.EXE
CUSTOMERS_REGISTER_DATABASE.EXE
ENG
-------------------------------------------------- -------------
SERVICE PROGRAM FOR GENERATION OF SQL SCRIPT FILES FROM DBF FILE
-------------------------------------------------- -------------
Example:
'customer.dbf'
'customer.txt'
'customer.sql'
Usage:
customer.txt
------------
into function:
__tab__create_all()
customer.sql
------------
\SQL
and if it finds it, then it fills with the data written in that file
PostgreSQL panel 'customer'
Previously, the application empties the 'customer' board.
This operation of filling the PostgreSQL table with data from the sql file
performed only at the request of the user (by clicking on the command button)
and is executed by the function:
__tab__create()
from the program:
__tab__create.prg
located in:
C_PGDB.DLL/LIB library
Notes:
Each Xbase++ PostgreSQL application from COBA Systems has its own
auxiliary-additional program for maintenance of PosgreSQL database.
If the app name is:
CUSTOMERS_REGISTER.EXE
CUSTOMERS_REGISTER_DATABASE.EXE
ENDTEXT
TxtFile:=cTxt()
MEMOWRIT(TxtFile,txt)
*******************************************
off := Font_codepage(10,"Consolas",238,.f.) // baznex.dll
C_EDIT(TxtFile,"DBF TO POSTGRESQL SQL SCRIPT",;
"DBF TO POSTGRESQL SQL SCRIPT",,,,,,off) // baznex.dll
*******************************************
CLEAR TYPEAHEAD
RETURN NIL
*---------------------------------------------------------------- START
* Ovo je Roger Donnay primer za drag-and-drop.
* Treba na osnovu njega napraviti funkciju koja će
* da izabrani dbf fajl unese u DCSTATIC objekat
* aplikacije sa drag-and-drop (to ostavljam za kasnije)
*
* This is a Roger Donnay drag-and-drop example.
* It is necessary to create a function based on it that will
* to import the selected dbf file into the DCSTATIC object
* apps with drag-and-drop (I'll leave that for later)
*----------------------------------------------------------------
FUNCTION XSample_45
*
* Drag and Drop
*
* This sample demonstrates dragging a value from a row/column in
* an array browse to another row/column. The value in the cell
* that is grabbed is swapped with the value in the cell dropped.
*
aDirectory := Directory()
FOR i := 1 TO Len(aDirectory)
aDirectory[i,1] := Upper(aDirectory[i,1])
NEXT
ASort(aDirectory,,,{|x,y|x[1]<y[1]})
DCREAD GUI ;
FIT ;
MODAL ;
BUTTONS DCGUI_BUTTON_EXIT ;
TITLE 'Drag a Value from one Row to another' ;
HANDLER _XSample_45 REFERENCE @oBrowse
RETURN nil
STATIC FUNCTION ;
_XSample_45 ( nEvent, mp1, mp2, oXbp, oDlg, GetList, oBrowse )
IF Valtype(oXbp) = 'O'
ELSEIF lButtonDown
ENDIF
ENDIF
IF nEvent = xbeM_LbUp
lButtonDown := .f.
ENDIF
RETURN DCGUI_NONE
*** END OF EXAMPLE ***
*----------------------------------------------------------------
* Ovo je Roger Donnay primer za drag-and-drop.
* Treba na osnovu njega napraviti funkciju koja će
* da izabrani dbf fajl unese u DCSTATIC objekat
* aplikacije sa drag-and-drop (to ostavljam za kasnije)
*
* This is a Roger Donnay drag-and-drop example.
* It is necessary to create a function based on it that will
* to import the selected dbf file into the DCSTATIC object
* apps with drag-and-drop (I'll leave that for later)
*---------------------------------------------------------------- END
DBF_FOLDER.PRG
//////////////////////////////////////////////////////////////////////////
// //
// //
// DBF_FOLDER.PRG
// //
// 23-10-2023 //
// //
// www.cobasystems.com --- COBA Systems --- Slobodan Stanojević Coba //
// Open Source Project BAST Business Account Software Technology //
// www.Alaska-Software.com --- Alaska Xbase++ version 2.0.1503 //
// www.Donnay-software.com --- eXpress++ version 2.0.268 //
// SAP --- Advantage Database Server ADS version 10.10.0.49 //
// Sergej Spirin --- FastReport for Xbase++ version 27.03.2015 //
// //
// //
//////////////////////////////////////////////////////////////////////////
#include "Xbp.ch"
#include "Appevent.ch"
#pragma library("XppUi2")
*************************************************************************
FUNCTION FILE_DIALOG_()
*************************************************************************
IF UPPER(work_dir)=="SQL"
lokacija := gde_exe()+"\SQL\*.*" // default: GDE_EXE()
cFile := oFileDlg:open(lokacija)
ELSE
cFile := oFileDlg:open("*.DBF")
ENDIF
// MsgBox(cFile)
nKraj := RAT("\",cFile)
cFolder := SUBSTR(cFile,1,nKraj-1)
//MsgBox("=="+folder+"==")
MemoWrit(gde_exe()+"\folder",cFolder)
RETURN {cFolder,cFile}
// *************************************************
// This function creates a default menu for opening
// and saving text files
//
oMenu:title := "~File"
oMenu:addItem( { "~New", ;
{|| oMLE:setData(""), oMLE:cargo := "", ;
SetAppWindow():setTitle( "No name" ), ;
oMenu:disableItem(4) } } )
oMenu:addItem( { "~Open...", ;
{|| ReadFile( oFileDlg, oMLE ), ;
IIf( Empty(oMLE:cargo), NIL, oMenu:enableItem(4)) } } )
oMenu:addItem( { ,, XBPMENUBAR_MIS_SEPARATOR,0 } )
oMenu:addItem( { "~Save", ;
{|| WriteFile( oMLE:cargo, oMLE ) }, ;
0, XBPMENUBAR_MIA_DISABLED } )
// *******************************************
// The procedure activates the file dialog for
IF ! Empty( cFile )
oMLE:cargo := cFile
oMLE:setData( MemoRead( cFile ) )
SetAppWindow():setTitle( cFile )
ENDIF
RETURN
// **************************************
// Write text buffer of the MLE to file
//
PROCEDURE WriteFile( cFile, oMLE )
IF ! Empty( cFile )
oMLE:cargo := cFile
MemoWrit( cFile, oMLE:getData() )
SetAppWindow():setTitle( cFile )
ENDIF
RETURN
DBF_INIEDIT.PRG
//////////////////////////////////////////////////////////////////////////
// //
// //
// DBF_INIEDIT.PRG //
// //
// 23-10-2023 //
// //
// www.cobasystems.com --- COBA Systems --- Slobodan Stanojević Coba //
// Open Source Project BAST Business Account Software Technology //
// www.Alaska-Software.com --- Alaska Xbase++ version 2.0.1503 //
// www.Donnay-software.com --- eXpress++ version 2.0.268 //
// Sergej Spirin --- FastReport for Xbase++ version 27.03.2015 //
// //
// Database Server PostgreSQL version 9.4.4. //
// //
// //
//////////////////////////////////////////////////////////////////////////
#include "Appevent.ch"
#include "Xbp.ch"
#include "common.ch"
#INCLUDE "dcdialog.ch"
*************************************************************************
FUNCTION DBF_INIEDIT()
*************************************************************************
LOCAL GetList := {}, oDlg
LOCAL xx
PRIVATE xpassword := .F.
*****************
ini___read()
*****************
* formirane su:
PUBLIC ;
work_database,; //:= "POSTGRESQL" ,; // or "ORACLE" for which database is the sql script
created
work_user ,; //:= "postgres" ,; // username
work_pass ,; //:= "coba" ,; // password
work_data ,; //:= "YES DATA" ,; // "YES DATA" table with data, "NO DATA" table without
data
work_db ,; //:= "test" ,; // naziv baze podataka - database name
work_sema //:= "public" // naziv scheme iz baze podataka - scheme name
xx:=0
xx:=xx+1+1
work_database := PADR(work_database,36)
@ xx,1 DCSAY "Database Server (POSTGRESQL or ORACLE)" FONT of2 SAYSIZE 0
xx:=xx+1
@ xx,1 DCGET work_database FONT of4 WHEN {|| .F. }
xx:=xx+1
work_user := PADR(work_user,36)
@ xx,1 DCSAY "User name (default=postgres)" FONT of2 SAYSIZE 0
xx:=xx+1
@ xx,1 DCGET work_user FONT of4 WHEN {|| xpassword }
xx:=xx+1
work_pass := PADR(work_pass,36)
@ xx,1 DCSAY "Password (default=postgres)" FONT of2 SAYSIZE 0
xx:=xx+1
@ xx,1 DCGET work_pass FONT of4 WHEN {|| xpassword }
xx:=xx+1
work_data := PADR(work_data,36)
@ xx,1 DCSAY "Filling SQL table with data from DBF file" FONT of2 SAYSIZE 0
xx:=xx+1
@ xx,1 DCGET work_data FONT of4 WHEN {|| .F. } // xpassword }
xx:=xx+1
work_db := PADR(work_db,36)
@ xx,1 DCSAY "Database (default=postgres)" FONT of2 SAYSIZE 0
xx:=xx+1
@ xx,1 DCGET work_db FONT of4 WHEN {|| xpassword }
xx:=xx+1
work_sema := PADR(work_sema,36)
@ xx,1 DCSAY "Scheme (default=public)" FONT of2 SAYSIZE 0
//----------------------------------------------------------------------------
xx:=xx+2
@ xx,01 ;
DCPUSHBUTTONXP CAPTION "Unlock;for changes" ;
SIZE 14,3 ACTION {||xpassword(),DC_getrefresh(GetList)} ;
CURSOR aCUR OUTLINE COLOR co1,co2 CLICKCOLOR co3,co4 FONT of22
@ xx,14 ;
DCPUSHBUTTONXP CAPTION "OK" ;
SIZE 10,3 ACTION {||DC_ReadGuiEvent(DCGUI_EXIT_OK,GetList)} ;
CURSOR aCUR OUTLINE COLOR co1,co2 CLICKCOLOR co3,co4 FONT of22
@ xx,14+10 ;
DCPUSHBUTTONXP CAPTION "Help" ACCELKEY xbeK_F1 ;
SIZE 10,3 ACTION {||;
c__procitaj(;
"Treba upisati sve zadate parametre." +chr(59)+;
"Program neke od njih ugrađuje u SQL" +chr(59)+;
"i TXT script fajlove, koje pravi iz" +chr(59)+;
"preuzetog DBF fajla." +chr(59)+;
" " +chr(59)+;
"Ovi SQL-TXT script fajlovi koriste " +chr(59)+;
"se iz posebne EXE aplikacije kojom " +chr(59)+;
"se kreira i puni podacima PostgreSQL" +chr(59)+;
"tabla koja je SQL klon DBF fajlA" +chr(59)+;
" " +chr(59)+;
"All default parameters should be entered." +chr(59)+;
"Program embeds some of them in SQL" +chr(59)+;
"and TXT script files, which it creates from" +chr(59)+;
"downloaded DBF file." +chr(59)+;
" " +chr(59)+;
"These SQL-TXT script files use " +chr(59)+;
"from a special EXE application that " +chr(59)+;
"created and loaded with PostgreSQL data" +chr(59)+;
"table which is SQL clone DBF fileA" +chr(59)+;
" ","DATABASE PARAMETERS")} ;
CURSOR aCUR OUTLINE COLOR co1,co2 CLICKCOLOR co3,co4 FONT of22
@ xx,14+10+10 ;
DCPUSHBUTTONXP CAPTION "Exit" ACCELKEY xbeK_ESC;
SIZE 10,3 ACTION {||DC_ReadGuiEvent(DCGUI_EXIT_OK,GetList)};
CURSOR aCUR OUTLINE COLOR co1,co2 CLICKCOLOR co3,co4 FONT of22
//----------------------------------------------------------------------------
******************
ini___write() // here
******************
c__poruka("UPISANO-WRITTEN","OK",,"G3") // bazne.dll
RETURN(.T.)
****************************
STATIC FUNCTION xpassword()
****************************
// xpassword := .F.
IF C__sifra(2,"(Password=22)")=.F.
RETURN NIL
ENDIF
xpassword := .T.
c_poruka("UNLOCKED","OK")
RETURN NIL
***************************************************************************
FUNCTION ini___read()
***************************************************************************
PUBLIC ini := gde_exe()+"\"+"C-DBF2SQLFILE.INI"
PUBLIC ;
work_database,; //:= "POSTGRESQL" ,; // ili "ORACLE" za koju bazu podataka se pravi SQL script
work_user ,; //:= "postgres" ,; // username za bazu podataka
work_pass ,; //:= "coba" ,; // password za bazu podataka
work_data ,; //:= "YES DATA" ,; // work_data="YES DATA" prenesi tablu i podatke, "NO DATA"
prenesi smo tablu
work_db ,; //:= "test" ,; // naziv baze podataka
work_sema //:= "public" // naziv scheme iz baze podataka
IF EMPTY(ALLTRIM(work_user))
// ako nema podatka - upiši u INI sve oznake u default vrednostima
// if there is no data - write in INI all tags in default values
***********************
ini___default() // here
***********************
ENDIF
RETURN NIL
***************************************************************************
FUNCTION ini___default(nn)
***************************************************************************
* ako ne postoji INI fajl, biće napravljen i u njega će biti upisane ove
* default vrednosti. Ako pak postoji INI fajl u njega će biti upiane ove
* default vrednosti
*
RETURN NIL
***************************************************************************
FUNCTION ini___write()
***************************************************************************
PUBLIC ini := gde_exe()+"\"+"C-DBF2SQLFILE.INI"
RETURN NIL
DBF_TO_POSTGRESQL_SQLSCRIPT.PRG
//////////////////////////////////////////////////////////////////////////
// //
// //
// DBF_TO_POSTGRESQL_SQLSCRIPT.PRG
// //
// 23-10-2023 //
// //
// www.cobasystems.com --- COBA Systems --- Slobodan Stanojević Coba //
// Open Source Project BAST Business Account Software Technology //
// www.Alaska-Software.com --- Alaska Xbase++ version 2.0.1503 //
// www.Donnay-software.com --- eXpress++ version 2.0.268 //
// SAP --- Advantage Database Server ADS version 10.10.0.49 //
// Sergej Spirin --- FastReport for Xbase++ version 27.03.2015 //
// //
// //
//////////////////////////////////////////////////////////////////////////
* ========================================================================= start
* ŠTA RADI OVAJ PROGRAM:
* =========================================================================
* OVAJ PROGRAM ČITA DbaseIII DBF/DBT FAJL (TABELU) I GENERIŠE SQL FAJL
* za ORACLE (sa DBF podacima ili bez DBF podataka)
* za PostgreSQL (sa DBF podacima ili bez DBF podataka)
*
* SQL fajl za ORACLE
*-------------------
* ČIJIM ĆE STARTOM IZVRŠENIM U ORACLE BAZI PODATAKA (SQLplus/SQLdeveloper)
* BITI IZVRŠEN PRENOS TE DbaseIII DBF TABELE U ISTOIMENU ORACLE 11g TABELU
* (Biće preneta struktura tabele - malo modifikovana - i podaci iz tabele)
*
* ======================================================================== start
* WHAT THIS PROGRAM DOES:
* ========================================================================
* THIS PROGRAM READS A DbaseIII DBF/DBT FILE (TABLE) AND GENERATES A SQL FILE
* for ORACLE (with or without DBF data)
* for PostgreSQL (with or without DBF data)
*
* SQL file for ORACLE
*-------------------
* WHICH WILL BE STARTED IN THE ORACLE DATABASE (SQLplus/SQLdeveloper)
* THE TRANSFER OF THAT DbaseIII DBF TABLE TO THE ORACLE 11g TABLE OF THE SAME NAME BE PERFORMED
* (The structure of the table will be transferred - slightly modified - and data from the
table)
*
* SQL file for PostgreSQL
*---------------------
* WHICH WILL BE STARTED IN THE PostgreSQL DATABASE (PL/PgSQL)
* THE TRANSFER OF THAT DbaseIII DBF TABLE TO THE SAME NAMED PostgreSQL TABLE BE PERFORMED
* (The structure of the table will be transferred - slightly modified - and data from the
table)
*
*
* ORACLE or PostgreSQL
*--------------------
* It is decided for which database this program will create the SQL script
* by loading the parameter from C-DBF2SQLFILE.INI via the function:
* sql_database_parameters() // DBF-TO-POSTGRESQL.PRG
* PUBLIC work_database,;
* work_user, work_pass, work_data, work_db, work_sema
*
* ini := gde_exe()+"\"+"C-DBF2SQLFILE.INI"
* Po defaultu:
* work_database := "POSTGRESQL" ,; // or "ORACLE"
* work_user := "postgres" ,; // username
* work_pass := "coba" ,; // password
* work_data := "YES DATA" ,; // work_data="YES DATA"
* work_db := "test" ,; // database name
* work_sema := "public" // scheme name
*
* IF work_database == "ORACLE"
*
#include "Appevent.ch"
#include "Common.ch"
#include "Xbp.ch"
#include "Directry.ch" // za funkciju directory()
#include "Xbtsys.ch"
**************************************************************************
FUNCTION DBF_TO_POSTGRESQL_SQLSCRIPT(_cDBFpath)
**************************************************************************
* cDBFpath = full path to dbf file, example: "C:\DATABASE\customer.dbf"
//------------------------------------------------------------ start
// DATABAZE USER I PASWORD
//------------------------------------------------------------
************
USER_PASS() // C-DBF2SQLFILE.PRG
************
* PUBLIC work_database // "ORACLE" or "POSTGRES"
* PUBLIC work_data, data // sql script sa podacima iz dbf fajla YES/NO
* PUBLIC work_user, work_pass, work_db, work_sema, user, pass
//------------------------------------------------------------
// DATABAZE USER I PASWORD
//------------------------------------------------------------ end
//------------------------------------------------------------ start
// PORUKA KORISNIKU message to user - IZBOR Choice YES-NO
//------------------------------------------------------------
IF FILE(gde_exe()+"\SQL","D") = .F.
dirmake( gde_exe()+"\SQL" )
ENDIF
cc:="Create SQL script for TABLE structure; and plus all data (all DBF records)"
IF c__neda(;
"Šta radi ovaj program: " +chr(59)+;
"Iz ovde izabranog DBF fajla:" +chr(59)+;
" "+cDBFpath +chr(59)+;
"kreiraju se SQL script falovi: " +chr(59)+;
" "+cSQLpath +chr(59)+;
" "+cTXTpath +chr(59)+;
"koji služe za kreiranje postgreSQL table:" +chr(59)+;
" "+_tsql_ +chr(59)+;
"koja odgovara izabranom DBF fajlu," +chr(59)+;
"i popunjava se podacima iz tog DBF fajla." +chr(59)+;
"--------------------------------------------" +chr(59)+;
"Ovi SQL script fajlovi služi za ugradnju " +chr(59)+;
"u SQL izraz iz koga se kreira Pg SQL tabla." +chr(59)+;
"Kreira se PgSQL tabla strukture kao DBF tabla" +chr(59)+;
"plus dodate Xbase UPSIZE-ISAM-PGDBE kolone," +chr(59)+;
"zatim obavezni indeksi i forigen key polja," +chr(59)+;
"po sistemu potrebnom za poslovne programe" +chr(59)+;
"COBA Systems pod postgreSQL PGDBE mašinom." +chr(59)+;
"--------------------------------------------" +chr(59)+;
"U SQL script fajl upisuje se pristup" +chr(59)+;
_db_+" bazi podataka (samo za oracle):" +chr(59)+;
" Database = "+_db_ +chr(59)+;
" Schema = "+_she_ +chr(59)+;
" User = "+_uid_ +chr(59)+;
" Pass = "+_pwd_ +chr(59)+;
"Create SQL script for TABLE structure and" +chr(59)+;
"plus all data from DBFfile (all DBF records)" +chr(59)+;
" ",":: Generisanje SQL fajla iz DBF fajla",,"V","R") == .F.
RETURN NIL
ENDIF
IF c__neda(;
"What this program does: " +chr(59)+;
"From DBF file selected here:" +chr(59)+;
" "+cDBFpath +chr(59)+;
"creating SQL script files: " +chr(59)+;
" "+cSQLpath +chr(59)+;
" "+cTXTpath +chr(59)+;
"which are used to create a postgreSQL table:"+chr(59)+;
" "+_tsql_ +chr(59)+;
"corresponding to the selected DBF file, and" +chr(59)+;
RETURN NIL
ENDIF
//------------------------------------------------------------
// PORUKA KORISNIKU message to user - IZBOR Choice YES-NO
//------------------------------------------------------------ end
* an upsize SQL table identically copied from the DBF table is formed
* with added upsize fields (columns) and no index
//------------------------------------------------------------ start
// FORMIRAJ PATH (LOKACIJU I NAZIV) ZA DBF FAJL I ZA SQL FAJL
// FORM PATH (LOCATION AND NAME) FOR DBF FILE AND FOR SQL FILE
//------------------------------------------------------------
* L E G E N D
* _she_ := work_sema // sql scheme name public
* _db_ := work_database // sql database name test
* _uid_ := work_user // database user name postgres
* _pwd_ := work_pass // database password postgres
* _tdbf_ := _tdbf_ // name - dbf fajl kupci.dbf
* cDBFpath := cDBFpath // path - dbf fajl c:\database\kupci.dbf
* _tsql_ := _tsql_ // sql table name kupci
* _tsql_ := _tsql_ // sql table name kupci
* cTXTpath := cTXTpath // path - txt fajl c:\app\kupci.txt
* cSQLpath := cSQLpath // path - sql fajl c:\app\kupci.sql
//------------------------------------------------------------
// FORM PATH (LOCATION AND NAME) FOR DBF FILE AND FOR SQL FILE
//------------------------------------------------------------ end
//------------------------------------------------------------ start
// ČITANJE STRUKTURE DBF FAJLA RADI PREVOĐENJA U SQL TABELU
// READING STRUCTURE OF DBF FILE FOR TRANSLATION INTO SQL TABLE
//------------------------------------------------------------
RECOVER
*--------------------------------------------
ch:=chr(13)
ec_k() // bazne.dll
confirmbox(,;
"DBF FAJL NIJE MOGUĆE OTVORITI" +ch+;
"- Ili je DBF fajl oštećen" +ch+;
"- Ili DBF fajl zahteva i DBT/FPT fajl" +ch+;
"- Ili to nije DBF fajl, bez obzira na" +ch+;
" to što ima extenziju DBF" +ch+;
" " +ch+;
"DBF FILE COULD NOT BE OPENED" +ch+;
"- Or DBF file is corrupted" +ch+;
"- Or DBF file also requires a DBT/FPT file" +ch+;
"- Or it's not a DBF file, regardless" +ch+;
" that has the extension DBF" +ch+;
"","STOP",;
XBPMB_OK,XBPMB_CRITICAL,;
XBPMB_SYSMODAL+XBPMB_MOVEABLE)
RETURN NIL
*--------------------------------------------
END SEQUENCE
ErrorBlock( bErrorHandler ) // reset old codeblock
//------------------------------------------------------------
// READING STRUCTURE OF DBF FILE FOR TRANSLATION INTO SQL TABLE
//------------------------------------------------------------ end
// FIXED ON :
work_database := "POSTGRESQL"
// u ovom programu pravi se samo POSTGRESQL database
// only POSTGRESQL database is created in this program
IF work_database = "ORACLE"
//------------------------------------------------------------ start
// S Q L S C R I P T F O R O R A C L E
//------------------------------------------------------------
__ORACLE__() // ovde
//------------------------------------------------------------
// S Q L S C R I P T F O R O R A C L E
//------------------------------------------------------------ end
//------------------------------------------------------------ start
// S Q L S C R I P T F O R P O S T G R E S Q L
//------------------------------------------------------------
xx := space(2)
? "--"
? "-- START -- "+ctn
? "--"
? "-----------------------------------------------------------------"
? " "
? "-- COBA Systems "+ dtoc(date())+" --- "+time()
? "-- Open Source Projct: Alaska Xbase++ DBF To " + work_database
? "--"
? "-- Translate"
? padr("-- ISAM Xbase DBF File ",23) + " --> "+_tdbf_
? "-- To"
? padr("-- SQL database Table ",23) + " --> "+_tsql_
? "--"
? "-- SQL Script: "+cTXTpath
? "-- Database : "+work_db
? "-- Schema : "+work_sema
? "-- User : "+work_user
? "-- Pass : "+work_pass
? " "
? "-----------------------------------------------------------------"
? "-----------------------------------------------------------------"
? xx + " "
? xx + "-- "+"P O S T G R E S Q L"+" --> "+_tsql_
? xx + "--"
? xx + "-- Ovde je poseban kod za svaku od DBF to SQL tabli | Here is a separate code for
each DBF to SQL table"
? xx + "-- Koriste se varijable umesto naziva šeme i table | Variables are used instead of
schema and table names"
? xx + "-- PRIVATE ctable := "+work_sema+"."+_tsql_
? xx + "-- PRIVATE ckey := "+_tsql_ + "_pkey"
? xx + " "
? "-----------------------------------------------------------------"
? xx + "-- Brisanje postojeće table | Deleting an existing table -- "
*** ? xx + "DROP TABLE IF EXISTS "+_tsql_+";" // varijanta a --- show literal table name
? xx + "DROP TABLE IF EXISTS &ctable;" // varijanta b --- shov variable for table name
? xx + " "
nCharLen := 1
// broj kojim se množi dužina stringa u karakterima
// zbog povećanja dužine polja u Oracle tabeli u
// odnosu na dužinu u DBF tabeli
//---
// number by which to multiply the length of the string in characters
// due to increasing field length in Oracle table to relative to the
// length in the DBF table
//----------------------------------------------------------------------- start
//--- KREIRANJE STRUKTURE REDA TABELE - POLJA U SLOGU
//--- CREATION OF TABLE ROW STRUCTURE - FIELDS IN RECORD
//-----------------------------------------------------------------------
/*
* PRIMER PL/SQL KOMANDE ZA CREATE TABLE
* EXAMPLE PL/SQL COMMAND FOR CREATE TABLE
CREATE TABLE DEMO -- napravi novu praznu tabelu DEMO
( ID_ integer, ili NOT NULL DEFAULT 0, -- integer
TEKST_ character(10), -- max 10 char
BROJ_ numeric(20,2), -- decimal number
DATUM_ date, -- 2018-12-31
FLAG_ boolean, ili NOT NULL DEFAULT false, -- yes or no, true or false
cField := aField[i]
cType := "xxx"
// string
IF aType[i]$"C"
nLen := (aLen[i] * nCharLen)
nLen := INT(nLen)
// za NVARCHAR2 ne treba povećavati polje u karakterima
// for NVARCHAR2 the field should not be increased in characters
// nCharLen = 1
cType := "character("+var2char(nLen)+")"
// NVARCHAR2 je dužina polja u unicode karakterima
// NVARCHAR2 is the length of the field in unicode characters
ENDIF
// date
IF aType[i]$"D"
cType := "date"
ENDIF
// numeric
IF aType[i]$"N"
*---
cType := "numeric("+var2char(aLen[i])+","+var2char(aDec[i])+")"
* uzmi da svaki numerik bude NUMBER(20,2) | take each number to be NUMBER(20,2)
* bez obzira koliko je aLen[i] u DBF polju | no matter how many aLen[i] are in the DBF
field
* cType := "numeric("+var2char(20)+","+var2char(aDec[i])+")"
*---
* samo ako je numerik bio integer | only if the numeric was an integer
* (koristi se za brojače i za šifre) | (used for counters and for codes)
IF aDec[i]=0
cType := "integer"
ENDIF
*---
ENDIF
// boolean
IF aType[i]$"L"
// for DBF boolean .T. or .F. in postgresql table
// is used
cType := "boolean"
ENDIF
// memo
UPSIZE := .T.
IF UPSIZE == .F.
IF i < nFieldCount
ELSE
? xx+PADR(cField,20 ) + PADR(cType,20 )
*** ? xx+");"
? xx+")"
? xx+"WITH (OIDS=FALSE,autovacuum_enabled=true);"
ENDIF
* if there is no UPSIZE plugin for the postgreSQL table
*-------------------- ako nema UPSIZE dodatka za postgreSQL tablu -------------
NEXT i
IF UPSIZE == .T.
*-------------------- ako ima UPSIZE dodatka za postgreSQL tablu --------------
* if there is a UPSIZE plugin for the postgreSQL table
//-----------------------------------------------------------------------
//--- KREIRANJE STRUKTURE REDA TABELE - POLJA U SLOGU
//--- CREATION OF TABLE ROW STRUCTURE - FIELDS IN RECORD
//----------------------------------------------------------------------- end
? xx+" "
? xx+"-- Kreiranje nove table | create new table ----------------------- END"
? xx+" "
? xx+"-- Kod između crta: Kreiranje nove table START i END | Code between lines: Creating
a new table START and END "
? xx+"-- Upisuje se (HARD CODED) u izvorni kod EXE aplikacije | It is written (HARD CODED)
into the source code of the EXE application"
? xx+"-- in prg: __tab__create__app.prg "
? xx+"-- in function: __tab__create__app() "
? xx+" "
? "-----------------------------------------------------------------"
? "--"
? "-- END -- "+ctn
? "--"
SET PRINTER TO
SET PRINTER OFF
SET CONSOLE ON
* END
* GENERIŠI SQL SCRIPT - KAO ASCII TEXT FAJL SA NAZIVOM: cTXTpath
* GENERATE SQL SCRIPT - AS ASCII TEXT FILE WITH NAME: cSQLpath
//------------------------------------------------------------
// S Q L S C R I P T F O R P O S T G R E S Q L
//------------------------------------------------------------ end
// napuni SQL tablu podacima iz DBF | fill the SQL table with data from the DBF
************************************************** // prenos slogova iz DBF u POSTGRESQL
PODACI_FROM_DBF_TO_SQL(cDBFpath,_tsql_,aField,xx) // here
************************************************** // transfer of records from DBF to ORACLE
RETURN(NIL)
***************************************************************************
FUNCTION PODACI_FROM_DBF_TO_SQL(cDBFpath,_tsql_,aField,xx)
***************************************************************************
* Punjenje SQL fajla podacima preuzetim iz DBF fajla
* Filling the SQL file with data taken from the DBF file
LOCAL radno:=SELECT()
LOCAL x := 0, i := 0, nField_Count
LOCAL cField, cData, cField_Name, cField_Type
//-----------------------------------------------------
//--- PREPIS PODATAKA IZ DBF FAJLA U SQL FAJL
//--- WRITE DATA FROM DBF FILE INTO SQL FILE
//-----------------------------------------------------
x := 0
nField_Count := FCount()
? "--"
? "-- START -- "+ctn
? "--"
/*
NEXT i
? xx+")"
*/
/*
* insert into table: varijanta B
* ---------------------------------
* ako je insert svih kolona iz tabele nema potrebe navoditi
* listu naziva kolona (polja) već se navode samo vrednosti koje
* pripadaju tim poljima, po istom redosledu po kome su polja
*
* if it is an insert of all columns from the table, there is no need to specify
* the list of column names (fields) only lists the values that
* belong to those fields, in the same order as the fields
PROGRES1(RECCOUNT()) // bazne.dll
GO TOP
DO WHILE .NOT. EOF()
x := x + 1
*=============
* VARIJANTA A
*=============
* vidi kod na kraju pod naslovom VARIJANTA A | see the code at the end under the heading
VARIANT A
*=============
* VARIJANTA B
*=============
* ovde se koristi VARIJANTA B | VARIANT B is used here
? xx+"("
FOR i = 1 TO nField_Count
cField_Type := TYPE(cField_Name)
//-------------- DATE
//-------------- NUMERIC
//-------------- MEMO
IF i < nField_Count
ENDIF
NEXT i
if brojac=x
? xx+");"
else
? xx+"),"
endif
? "-----------------------------------------------------------------"
PROGRES2() // bazne.dll
SKIP
ENDDO
USE
SELECT(radno)
SET PRINTER TO
SET PRINTER OFF
SET CONSOLE ON
//-----------------------------------------------------
//--- PREPIS PODATAKA IZ DBF FAJLA U SQL FAJL
//--- WRITE DATA FROM DBF FILE INTO SQL FILE
//-----------------------------------------------------
PROGRES3() // bazne.dll
*********************************************************************
* END
* GENERIŠI SQL SCRIPT - KAO ASCII TEXT FAJL SA NAZIVOM: cSQLpath
* GENERATE SQL SCRIPT - AS ASCII TEXT FILE WITH NAME: cSQLpath
********************************************************************* POSTGRESQL - END
************************************
RUNSHELL( cSQLpath, "NOTEPAD.EXE")
************************************
RETURN NIL
/*
************************************************************************* VARIJANTA A START
// VARIJANTA A
// lista kolona-polja
? "("
FOR i = 1 TO LEN(aField)
IF i < nField_Count
? aField[i] + ","
ELSE
? aField[i] + " "
ENDIF
NEXT i
? ")"
// za svaki slog-record navesti podatke koji idu u gornja polja po istom redosledu
// for each slog-record, specify the data that goes into the above fields in the
// same order
? xx+"VALUES "
? xx+"("
FOR i = 1 TO nField_Count
cField_Type := TYPE(cField_Name)
//-------------- DATE
//-------------- NUMERIC
//-------------- MEMO
IF i < nField_Count
ELSE
ENDIF
NEXT i
? xx+");"
************************************************************************** VARIJANTA A END
*/
LOCAL i,x,B,DBalias
LOCAL naziv,duzina,ostatak
LOCAL brojac,duz,crta1,crta2
FOR i = 1 to B
fime[i] := PADR(ALLTRIM(fime[i]),10)
NEXT i
crta1 = space(5)
brojac := 0
duz := 0
FOR i = 1 to B
brojac := brojac+1
duz := duz+ fduz[i]
? "-- "+ crta1 + str(brojac,3) + " "
?? fime[i] + " " + ftip[i] + " " + str(fduz[i],4,0) +" "+ str(fdec[i],1,0)+;
" "+"--"
NEXT i
? " "
RETURN NIL
*################################
* ORACLE
*################################
*************************************************************************
FUNCTION __ORACLE__()
*************************************************************************
//------------------------------------------------------------ start
// S Q L S C R I P T Z A O R A C L E
//------------------------------------------------------------
xx := space(2)
? "--"
? "-- START"
? ctn // "-- "+_tsql_+".SQL"
? "--"
? "-------------------------------------------------------------"
? "-- COBA Systems "+ dtoc(date())+" --- "+time()
? "-- Open Source Projct: Alaska Xbase++ DBF To "+work_database
? "--"
? "-- Translate"
? padr("-- ISAM Xbase DBF File ",33) + " --> "+_tdbf_
? "-- To"
? padr("-- SQL database Table "+work_database,33) + " --> "+_tsql_
? "--"
? "-- SQL Script: "+cSQLpath
? "-- Database : "+work_db
? "-- Schema : "+work_sema
? "-- User : "+work_user
? "-- Pass : "+work_pass
? "-------------------------------------------------------------"
*********************************************************************
* KONEKTUJ SE NA DATABAZE SHEMU SA USER/PASSWORD ZA SHEMU (ZA USERA)
*********************************************************************
? xx + "--"
? xx + "-- "+work_database+" --> "+_tsql_
? xx + "--"
? xx + "-- Konekcija:"
? xx + "-- CONNECT user/password iz fajla:"
? xx + "-- DBFDOC.INI"
//-----------------------------------------------------
//--- KREIRANJE STRUKTURE REDA TABELE - POLJA U SLOGU
//-----------------------------------------------------
IF aType[i]$"C"
nLen := (aLen[i] * nCharLen)
nLen := INT(nLen)
// za NVARCHAR2 ne treba povećavati polje u karakterima
// pa je nCharLen = 1
cType := "NVARCHAR2("+var2char(nLen)+")"
// NVARCHAR2 je dužina polja u unicode karakterima
ENDIF
IF aType[i]$"D"
cType := "DATE"
ENDIF
IF aType[i]$"N"
*---
* cType := "NUMBER("+var2char(aLen[i])+","+var2char(aDec[i])+")"
* uzmi da svaki numerik bude NUMBER(20,2)
* bez obzira koliko je aLen[i] u DBF polju
cType := "NUMBER("+var2char(20)+","+var2char(aDec[i])+")"
*---
* samo ako je numerik bio integer
* uzmi da svaki numerik bude NUMBER(10)
* (koristi se za brojače i za šifre)
IF aDec[i]=0
cType := "NUMBER(10)"
ENDIF
*---
ENDIF
IF aType[i]$"L"
// za DBF boolean .T. ili .F. u oracle tabeli
// koristi se string i to samo jedan CHAR znak 'T' ili 'F'
cType := "NCHAR(1)"
ENDIF
IF aType[i]$"M"
// za memo polje dozvoli max 1000 unicode karaktera, bez obzira koliko
// karaktera ima u DBF memo polju
* cType := "NVARCHAR2("+var2char(aLen[i])+")"
cType := "NVARCHAR2(600)"
ENDIF
NEXT i
? xx+");"
? xx+" "
? xx+"-- Broj karaktera u CHAR DBF polju pomnožen je sa "+var2char(nCharLen)
? xx+"-- i dobijen je broj karaktera za NVARCHAR2 polje"
? xx+"-- Kreiranje nove table kraj -- "
? xx+" "
//-----------------------------------------------------
//--- KREIRANJE STRUKTURE REDA TABELE - POLJA U SLOGU
//-----------------------------------------------------
************************************************************************
* izmeni_tabelu_prema_coba_dbf_fajlu(cDBFpath,_tsql_,aField,cSQLpath,xx)
// DBF_to_oracle_and_postgres_coba.prg
************************************************************************
****************************************************
// PUNJENJE TABLE
* podaci_iz_dbf_u_oracle(cDBFpath,_tsql_,aField,xx)
// DBF_to_oracle_and_postgres_coba.prg
****************************************************
? xx+"SPOOL OFF"
? xx+"EXIT;"
? xx+" "
? "-- "+_tsql_+".SQL"
? "-- END --"
? xx+" "
SET PRINTER TO
SET PRINTER OFF
SET CONSOLE ON
*********************************************************************
* END
* GENERIŠI SQL SCRIPT - KAO ASCII TEXT FAJL SA NAZIVOM: cSQLpath
********************************************************************* ORACLE - END
//------------------------------------------------------------
// S Q L S C R I P T Z A O R A C L E
//------------------------------------------------------------ end
*************************************************************************
RETURN NIL // FUNCTION __ORACLE__()
*************************************************************************
*################################
* T E S T I N G
*################################
/*
V A Ž N O
---------
Iz ove aplikacije odnosno iz funkcije:
FUNCTION DBF_TO_POSTGRESQL_SQLSCRIPT(_cDBFpath)
FUNCTION DBF_TO_ORACLE_SQLSCRIPT(_cDBFpath)
Ova funkcija samo pravi SQL fajl (običan ASCII tekst fajl)
koji se može naknadno startovati iz proceduralnih jezika:
ORACLE database (sqlplus) i PGSQL database (pl/pgsql)
FUNCTION DBF_TO_ORACLE_SQLSCRIPT(_cDBFpath)
IMPORTANT
---------
From this application or function:
FUNCTION DBF_TO_POSTGRESQL_SQLSCRIPT(_cDBFpath)
FUNCTION DBF_TO_ORACLE_SQLSCRIPT(_cDBFpath)
This function only creates an SQL file (plain ASCII text file).
which can subsequently be started from procedural languages:
ORACLE database (sqlplus) and PGSQL database (pl/pgsql)
which will create the ORACLE and PGSQL tables and populate them
data from the DBF table
FUNCTION DBF_TO_ORACLE_SQLSCRIPT(_cDBFpath)
*/
**************************************************************************
FUNCTION test__oracle__dbf_file_to_sql_table(lokacija)
**************************************************************************
*
* Ovaj XBASE2ORACLE.DBF fajl služi kao primer za kreiranje programa
*
* FUNCTION DBF_TO_ORACLE_SQLSCRIPT(_cDBFpath)
*
* kojim se iz DBF fajla creira SQL fajl za kreiranje ORACLE database i
* ORACLE SQL table XBASE2ORACLE
*
//---------------------------------------------------------------
// (1) TESTIRANJE - PRVO SE NAPRAVI DBF fajl XBASEORACLE.DBF
// (1) TESTING - FIRST CREATE DBF file XBASEORACLE.DBF
//---------------------------------------------------------------
LOCAL radno := SELECT(), astructure := {}
SELECT 0 // prvo slobodno područje
db:=lokacija+"\"+"XBASE2ORACLE.DBF"
DELETE FILE (db)
aStructure := { ;
{ "ID_" ,"N", 6, 0 } ,; // N=NUMERIC-INTEGER FIELD
{ "TEKST_" ,"C", 10, 0 } ,; // C=CHARACTER FIELD
{ "BROJ_" ,"N", 10, 2 } ,; // N=NUMERIC-DECIMAL FIELD
{ "DATUM_" ,"D", 8, 0 } ,; // D=DATE FIELD
{ "BUL_" ,"L", 1, 0 } ,; // L=LOGIC FIELD
{ "MEMO_" ,"M", 10, 0 } ; // M=MEMO FIELD
}
DbCreate( db, aStructure, "DBFNTX" )
//--------------------------------------------------------------------
// (2) TESTIRANJE - DODA SE JEDAN SLOG U TU DBF TABELU XBASEORACLE.DBF
// (2) TESTING - ADDING ONE RECORD TO THAT DBF TABLE XBASEORACLE.DBF
//--------------------------------------------------------------------
USE (db) NEW SHARED
APPEND BLANK
//---DATE-FILL iz VARIJABLI:
REPLACE DATUM_ WITH DATE()
//---CARACTER-FILL iz VARIJABLI:
REPLACE TEKST_ WITH "Text=ŠĐČĆŽ"
//---NUMERIC-FILL iz VARIJABLI:
REPLACE BROJ_ WITH 123456.78
//---LOGIC-FILL iz VARIJABLI:
REPLACE BUL_ WITH .T.
dugi_text := ;
"Ovde se upisuje 'dugi tekst' koji može da sadrži"+chr(13)+chr(10)+;
"Serbian Latin i Serbian Cyrilic fontove. "+chr(13)+chr(10)+;
"Serbian Latin:..... ŠĐČĆŽ šđčćž "+chr(13)+chr(10)+;
"Serbian Cyrilic:... QWŠĐČĆŽX qwšđčćžx "+chr(13)+chr(10)+;
"treba da budu Unicode UTF-8. "+chr(13)+chr(10)+;
"Jednostruke navodnike u tekstu prevesti u znak |"+chr(13)+chr(10)+;
"---------- ENG --------" +chr(13)+chr(10)+;
"Here you enter 'long text' which can contain" +chr(13)+chr(10)+;
"Serbian Latin and Serbian Cyrillic fonts. " +chr(13)+chr(10)+;
"Serbian Latin:..... ŠĐČĆŽ šđčĆž " +chr(13)+chr(10)+;
"Serbian Cyrillic:... QWŠĐČĆŽX qwšđčćžx " +chr(13)+chr(10)+;
"should be Unicode UTF-8. " +chr(13)+chr(10)+;
"Translate single quotes in the text to |"
//---MEMO-FILL iz VARIJABLI:
REPLACE MEMO_ WITH dugi_text
USE
SELECT(radno)
RETURN NIL
//--------------------------------------------------------------------------
// (3) TESTIRANJE - NAPRAVI SE SQL SCRIPT ZA PRENOS PODATAKA IZ DBF U ORACLE
// (3) TESTING - CREATE A SQL SCRIPT TO TRANSFER DATA FROM DBF TO ORACLE
//--------------------------------------------------------------------------
/*
************************************************************************* START SQL
--
-- START
-- XBASE2ORACLE.SQL
--
-------------------------------------------------------------
-- COBA Systems 29.09.2016
-- Open Source Projct: Alaska Xbase++ DBF To Oracle DBF
-- Automatski generisano iz Xbase++ programa XBASE2ORACLE.EXE
-- SQL Script: Z:\[XW]\{DBFDOC}\DBFDOC\XBASE2ORACLE.SQL
-- Translate Xbase++ DBF file To Oracle Table
-- Xbase: XBASE2ORACLE.DBF To Oracle: XBASE2ORACLE
-------------------------------------------------------------
--
-- X B A S E F I L E -- XBASE2ORACLE.DBF
--
-- 1 ID_ N 6 0 --
-- 2 TEKST_ C 10 0 --
-- 3 BROJ_ N 10 2 --
-- 4 DATUM_ D 8 0 --
-- 5 BUL_ L 1 0 --
-- 6 MEMO_ M 10 0 --
SPOOL OFF
EXIT;
-- XBASE2ORACLE.SQL
-- END --
/*
************************************************************************* START
*------------------------------------
* CREATE ORACLE TABLE 'XBASE2ORACLE'
*------------------------------------
ECHO OFF
sqlplus /nolog @XBASE2ORACLE.SQL
PAUSE
ECHO OFF
sqlplus /nolog @C:\TEST\XBASE2ORACLE.SQL
PAUSE
-------------------------------------------------------------------------
*-----------------------------------
* CREATE ORACLE TABLE 'XBASE2ORACLE'
*-----------------------------------
************************************************************************* END
*/
C-DBF2SQLFILE.EXE
Note: