Moving to X# and the winner is...

Public support forum for peer to peer support with related to the Visual Objects and Vulcan.NET products
Anonymous

Moving to X# and the winner is...

Post by Anonymous »

Hi, I've looked everywhere that I can think of logically for these questions, so I'll leave it here.

Take for example, this VO 2.8 code which I have poseted here before:

METHOD Start() CLASS App
LOCAL oServer as DbServer
local aDBF as array
Local cDir
cDir := WorkDir() + "Invoices"
DirMake(cDir)
cDir := WorkDir() + "Filters"
DirMake(cDir)
cDir := WorkDir() + "Original Reports"
DirMake(cDir)

request dbfcdx
RddSetDefault("DBFCDX")
Set Decimals to 2


// Create Client Database and Indexes
aDBF := {}
AAdd(aDBF, {"ClCode", "C", 10, 0})
AAdd(aDBF, {"ClName", "C", 100, 0})
AAdd(aDBF, {"ClAdd1", "C", 100, 0})
AAdd(aDBF, {"ClAdd2", "C", 100, 0})
AAdd(aDBF, {"ClState", "C", 3, 0})
AAdd(aDBF, {"ClSuburb", "C", 50, 0})
AAdd(aDBF, {"ClPhone", "C", 10, 0})
AAdd(aDBF, {"ClPcode", "C", 4, 0})
AAdd(aDBF, {"ClABN", "C", 20, 0})
AAdd(aDBF, {"ClEmail", "C", 100, 0})
AAdd(aDBF, {"ClComments", "M", 10, 0})
DBCREATE("CLIENT", aDBF, "DBFCDX")
oServer := DbServer{"Client"}
oServer:CreateOrder("CLCode", "Client","CLCode",,.T.)
oServer:CreateOrder("CLName", "Client", "ClName")
oServer:CreateOrder("ClState", "Client", "ClState")
oServer:CreateOrder("CLPcode", "Client", "ClPCode")
oServer:Commit()
oServer:Close()



//Create Details Database and Indexes
aDBF := {}
AAdd(aDBF, {"ClCode", "C", 10, 0})
AAdd(aDBF, {"ClName", "C", 100, 0})
AAdd(aDBF, {"Dname", "C", 50, 0})
AAdd(aDBF, {"JobDate", "D", 10, 0})
AAdd(aDBF, {"JobFin", "L", 1, 0})
AAdd(aDBF, {"JobTime", "C", 10, 0})
AAdd(aDBF, {"JobDetails", "M", 10, 0})
AAdd(aDBF, {"NPC", "M", 10, 0})
AAdd(aDBF, {"JobNumber", "C", 5, 0})
AAdd(aDBF, {"PONumber", "C", 15, 0})
AAdd(aDBF, {"Rate", "N", 10, 2})
AAdd(aDBF, {"Units", "N", 10, 2})
AAdd(aDBF, {"RateType", "C", 15, 0})
AAdd(aDBF, {"Subby", "C", 50, 0})
AAdd(aDBF, {"Rego", "C", 50, 0})
AAdd(aDBF, {"Invoiced", "L", 1, 0})
AAdd(aDBF, {"InvFile", "C", 250, 0})
AAdd(aDBF, {"MapFile", "C", 250, 0})
DBCREATE("Details", aDBF, "DBFCDX")
oServer := DbServer{"DETAILS"}
oServer:CreateOrder("CLCode", "Details", "CLCode" )
oServer:CreateOrder("JobDate", "Details", "JobDate")
oServer:CreateOrder("JobFin", "Details", "JobFin")
oServer:CreateOrder("JobNumber", "Details", "JobNumber")
oServer:CreateOrder("PONumber", "Details", "PONumber",, .T.)
oServer:CreateOrder("Subby", "Details", "Subby",, .T.)
oServer:CreateOrder("Rego", "Details", "Rego")
oServer:CreateOrder("Invoiced", "Details", "Invoiced")
oServer:CreateOrder("InvFile", "Details", "InvFile")
oServer:CreateOrder("MapFile", "Details", "MapFile")
oServer:Commit()
oServer:Close()


//Create JobNumber Database
aDBF := {}
AAdd(aDBF, {"JobNumber", "N", 5, 0})
DBCREATE("JobNo", aDBF, "dbfcdx")
oServer := DbServer{"JobNo"}
oServer:CreateOrder("JobNumber", "JobNo","JobNumber")
oServer:APPEND()
oServer:FIELDPUT(#JobNumber, 0)
oServer:Commit()
oServer:Close()



// Create Rates Database and Indexes
aDBF := {}
AAdd(aDBF, {"RateType", "C", 10, 0})
DBCREATE("Rates", aDBF, "DBFCDX")
oServer := DbServer{"RATES"}
oServer:APPEND()
oServer:FIELDPUT(#RateType, "Each")
oServer:APPEND()
oServer:FIELDPUT(#RateType, "Hourly")
oServer:APPEND()
oServer:FIELDPUT(#RateType, "Quoted")
oServer:APPEND()
oServer:FIELDPUT(#RateType, "Zone")
oServer:Commit()
oServer:Close()


// Create Configuration File Database
aDBF := {}
AAdd(aDBF, {"FromEmail", "C", 100, 0})
AAdd(aDBF, {"TermDays", "N", 3, 0})
AAdd(aDBF, {"EOM", "N", 3, 0})
AAdd(aDBF, {"CLName", "C", 100, 0})
AAdd(aDBF, {"ABN", "C", 15, 0})
AAdd(aDBF, {"Add1", "C", 100, 0})
AAdd(aDBF, {"Add2", "C", 100, 0})
AAdd(aDBF, {"Suburb", "C", 50, 0})
AAdd(aDBF, {"State", "C", 3, 0})
AAdd(aDBF, {"Pcode", "C", 4, 0})
AAdd(aDBF, {"Phone1", "C", 20, 0})
AAdd(aDBF, {"Email", "C", 100, 0})
AAdd(aDBF, {"TandC", "M", 10, 0})
DBCREATE("BMConfig", aDBF, "DBFCDX")

FCopy("BMInvoice.rpt", cDir + "BMInvoice.rpt")
FCopy("Blank Invoice.rpt", cDir + "Blank Invoice.rpt")
FCopy("JobNumber.rpt", cDir + "JobNumber.rpt")
FCopy("JobList.rpt", cDir + "JobList.rpt")
FCopy("WorkSheet.rpt", cDir + "WorkSheet.rpt")
FCopy("Client Details.rpt", cDir + "Client Details.rpt")

self:Quit()

Return self


I cannot see anywhere how to recode that (or something giving the same result) using X#. Is is possible? If so, how please.

I don't expect you to rewrite the entire code, just add pointers where I'm going wrong. These are just some of the errors I'm getting on compiling:

error XS9003: Pre-processor: Include file not found: 'VOSystemLibrary.vh' 4,10 Start1.prg SdiApp1
error XS9003: Pre-processor: Include file not found: 'VOSystemClasses.vh' 5,10 Start1.prg SdiApp1
error XS9002: Parser: unexpected input '{#' 337,13 Start1.prg SdiApp1
error XS9002: Parser: unexpected input '}' 337,24 Start1.prg SdiApp1
error XS9002: Parser: mismatched input 'AS' 340,14 Start1.prg SdiApp1
error XS9002: Parser: unexpected input 'RETURN' 342,9 Start1.prg SdiApp1
error XS9002: Parser: mismatched input '(' expecting EOS 342,29 Start1.prg SdiApp1
Compilation failed (7 errors)

The Return error, I'm thinking is just a complier switch, and the first two are ok also.. Others I have had say that Arrays are not applicable in X# core, dbDServer namespace error etc.

Thanks again.
FFF
Posts: 1581
Joined: Fri Sep 25, 2015 4:52 pm
Location: Germany

Moving to X#

Post by FFF »

Jeff,
* pls attach the zipped solution to test.
EDIT:
Started Xide, made a new SDIApp1 from samples, as probably you did (?), went to properties and clicked "Console" to see my outputs...
Now, put this in Start.prg
FUNCTION Start( asCmdLine AS STRING[] ) AS INT
//METHOD Start() CLASS App
LOCAL oServer AS DbServer
LOCAL aDBF AS ARRAY
LOCAL cDir
? cDir := WorkDir() + "Invoices"
/*DirMake(cDir)
cDir := WorkDir() + "Filters"
DirMake(cDir)
cDir := WorkDir() + "Original Reports"
DirMake(cDir)*/
wait
RETURN 1

Compiles and runs showing:
C:DevXIDEProjects4BinDebugInvoices

Now, to proceed with your DBFCDX, you HAVE to have VN runtime on your machine, as DBFCDX is not (yet) part of the runtime. If not, the CreateOrder part CAN'T work.

Karl
Regards
Karl
(on Win8.1/64, Xide32 2.20, X#2.20.0.3)
User avatar
wriedmann
Posts: 3757
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

Moving to X#

Post by wriedmann »

Hi Jeff,

this code should compile in X# as it is, but you have to wait for the DBFCDX RDD to be ready.

Wolfgang
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
BiggyRat

Moving to X#

Post by BiggyRat »

Sorry, my bad. I must have copied the wrong piece of code. The result is still the same though...

On a completely unrelated subject... why are viaef files allowed to be uploaded while vimef files are not? Just an oversight maybe?
Attachments

[The extension viaef has been deactivated and can no longer be displayed.]

BiggyRat

Moving to X#

Post by BiggyRat »

Sorry, but your code Karl Returns:

error XS0246: The type or namespace name 'DbServer' could not be found (are you missing a using directive or an assembly reference?) 3,7 Start1.prg SdiApp1
Compilation failed (1 error)
User avatar
lumberjack
Posts: 727
Joined: Fri Sep 25, 2015 3:11 pm
Location: South Africa

Moving to X#

Post by lumberjack »

Jeff,
BiggyRat wrote:Sorry, but your code Karl Returns:
error XS0246: The type or namespace name 'DbServer' could not be found (are you missing a using directive or an assembly reference?) 3,7 Start1.prg SdiApp1
Compilation failed (1 error)
A search in the X# help file on DbServer class:

Code: Select all

DbServer Class 
Create a data server that can operate with existing .DBF database files and their associated index files.
Inheritance Hierarchy
Object
  DataServer
    DbServer
Namespace:  VO
Assembly:  VORDDClasses (in VORDDClasses.dll) Version: 2.0
You need to have a reference to this Assembly in your application...
______________________
Johan Nel
Boshof, South Africa
BiggyRat

Moving to X#

Post by BiggyRat »

Aren't I doing that? If anything, I'm referencing far too much surely?
Attachments
Compile.JPG
Compile.JPG (32.45 KiB) Viewed 652 times
User avatar
lumberjack
Posts: 727
Joined: Fri Sep 25, 2015 3:11 pm
Location: South Africa

Moving to X#

Post by lumberjack »

Jeff,
BiggyRat wrote:Aren't I doing that? If anything, I'm referencing far too much surely?
Yes, drop all those Vulcan*.dll references, you not needing any Vulcan stuff, but then add VORDDClasses.dll etc.
______________________
Johan Nel
Boshof, South Africa
BiggyRat

Moving to X#

Post by BiggyRat »

OK Johan,

With just 4 references, I get (see 4refs.jpg):

error XS0246: The type or namespace name 'DbServer' could not be found (are you missing a using directive or an assembly reference?) 25,7 Start1.prg SdiApp1
Compilation failed (1 error)

Without the two Vulcan references shown in 4Refs.jpg, I get:
error XS9014: The dialect 'VO' requires a reference to the runtime DLLs VulcanRT.DLL and VulcanRTFuncs.DLL or XSharp.Core.DLL and XSharp.RT.DLL.
Compilation failed (1 error)
Attachments
4refs.png
4refs.png (9.73 KiB) Viewed 652 times
BiggyRat

Moving to X#

Post by BiggyRat »

OK. For those of you playing along at home, the winning combination in this round of X# Lotto are
System
VORDDClasses
VOSystemClasses
XSharp.core
and
XSharp.RT

How'd you go at home?

However! It now gives me this.... (see attachment)
Attachments
more bollocks.png
more bollocks.png (54.7 KiB) Viewed 652 times
Post Reply