Hi 

Don't know if this upsize code will help anybody else but will share it.
This has been run with SQL express 2008r2
Run the upsizing wizard to send the structure with no data. Run this on a 
backup of the fox data.

This uses Pauls CABuilder to generate CursorAdapters for the SQL database
It then scans a given folder for all DBFs, opens the CA and sends the records 
to the ca.
If the autoIdent is important then update the records one at a time with 
TableUpdate(.f.) and call the DBCC function to change the ID.

This code updates every 1000 rows with tableupdate(.t.)

Released as is with no warranties...use at your own risk....blah blah

Takes about 90 minutes to run on one of my bigger databases approx. 1m records


**********************************
***
*** Instructions
***
*** Sometimes the upsizing wizard is not sending data, just the structure
***
*** Run this and set the nulls
*** Copy the compdata to the upsize folder
*** Run upsize wizard, if it doesn't error fine
*** If it doesn't send the data come back here, run the copy upsize data
*** It takes hours to do this manually so do it late at night.
***
*** May need to regenerate the CAClassesSQL and DESQL in the project
***********************************


Clear
Set Status Bar On

Set TABLEVALIDATE To 0

Set Multilocks On
Set Exclusive On
Set Deleted On
Close Databases
For i =1 To 255
Select (i)
Use
Next

Wait Window "Copy files to SQL Server Database" Nowait Noclear

Set Default To d:\app\Source

Set Multilocks On
If Type("gcConnString")="U"
gcConnString="Driver=SQL 
Server;server=sql;database=test;uid=admin;pwd=password;trusted_connection=no;"
Set Classlib To d:\app\source\desql Additive  && Data environment class with 
all the CAs
Set Classlib To d:\app\Source\caclassessql Additive   && CAs for SQL
Endif


nHandle=Sqlstringconnect(gcConnString)
odata=Createobject("deallfilessql")
odata.OpenTables()

starttime=Time()

If Messagebox("Read file fox",36,"Confirm")=6

oldPath=Justpath(Locfile("*.dbc","DBC","Please locate original database"))
Set Deleted On
Set Default To &oldPath
nNum=Adir(aFiles,"*.dbf")
For N=1 To nNum
DoEvents
DoEvents
DoEvents

cFile=aFiles[n,1]

cFile=Left(cFile,Len(cFile)-4)
cSQL="delete from "+cFile
nStat=EXECSQL(nHandle,cSQL)
ca=cFile

? "Converting " +cFile+" to " + ca+"    start time "+Left(Time(),5)

If PEMSTATUS(odata,ca,5)
If Select(cFile)>0
Use In &cFile
Endif
Select 0

** SET STEP ON
Use &cFile Alias old
Go Top
odata.&ca..lNoDataOnLoad=.F.
odata.&ca..cSelectCMDFilter="f_rn=0"
odata.&ca..cselectorderby="f_rn"
odata.&ca..CursorFill()


If Select("qte_d")>0
Select &ca


Select old
SCAN


Scatter Memvar Memo
Select 0
* odata.&ca..cSelectCMDFilter="f_rn=0"
* odata.&ca..CursorFill()
Select old
If Recno()/25=Int(Recno()/25) OR .t.
Wait Clear
Wait Window "Processing "+cFile+" "+Str(Recno())+" of "+Str(Reccount()) Nowait 
Noclear
** ?"Processing "+cFile+" "+Str(Recno())+" of "+Str(Reccount())
DoEvents Force
DoEvents
DoEvents
Endif

Select &ca
Append Blank
Gather Memvar Fields Except f_rn Memo
* EXECSQL(nHandle,"DBCC CHECKIDENT 
('"+cFile+"',reseed,"+Alltrim(Str(m.f_rn-1))+")")
* Tableupdate(.f.)

IF Recno()/1000=Int(Recno()/1000)
=TABLEUPDATE(.t.)
odata.&ca..cSelectCMDFilter="f_rn=0"
odata.&ca..CursorFill()
ENDIF


Select old
Endscan
Select &ca
Tableupdate(.t.)


Use In old

Else
Wait Window "Unable to open table "+ca
ENDIF
? "End time "+TIME()

Else
Wait Window "No CA for "+cFile Nowait Noclear

Endif
If Select("old")>0
Use In old
Endif

Next
Endif
?

?? "Conversion started "
?? starttime
?? " ended at "
?? Time()
?


Endif


Function EXECSQL
Lparameters nHandle,cSQL

nTimes=1
Do While .T.
DoEvents Force

nStat=SQLEXEC(nHandle,cSQL)
If nStat<>0
Exit
Endif
If nTimes>5
Wait Window cSQL+"("+Alltrim(Str(nTimes))+")" Nowait Noclear
DoEvents Force
Endif

If nTimes=100
Exit
Endif
nTimes=nTimes+1
DoEvents Force
DoEvents Force

Enddo

Return .T.


Function setnull()

cPath=oldPath
Set Default To &cPath
numfiles=Adir(a,"*.dbf")


lPack=Messagebox("Pack the local tables first",36,"Confirm")=6
For N=1 To numfiles
cDBF=a[n,1]
Wait Window cDBF Nowait Noclear

If File(cDBF)
cDBF=Strtran(cDBF,".DBF","",1,999,1)

Use &cDBF
If lPack
Wait Window cDBF+Chr(13)+Chr(10)+"Pack" Nowait Noclear
Pack
Endif
numfields=Afields(b)
Use
For F=1 To numfields
cfield=b[f,1]
If Upper(cfield)="F_RN"
Loop
Endif

Wait Window cDBF+Chr(13)+Chr(10)+cfield+Chr(13)+Chr(10)+"Set Null" Nowait 
Noclear
Alter Table &cDBF Alter &cfield Null
Next
Endif
Next



Return


_______________________________________________
Post Messages to: ProFox@leafe.com
Subscription Maintenance: https://mail.leafe.com/mailman/listinfo/profox
OT-free version of this list: https://mail.leafe.com/mailman/listinfo/profoxtech
Searchable Archive: https://leafe.com/archives
This message: 
https://leafe.com/archives/byMID/003001d9f9e2$445c6010$cd152030$@compsys.co.uk
** All postings, unless explicitly stated otherwise, are the opinions of the 
author, and do not constitute legal or medical advice. This statement is added 
to the messages for those lawyers who are too stupid to see the obvious.

Reply via email to