1

Konu: MsSql içinde rapor tasarımı

Selamlar;
Mevcutta raporlarımı proje içinde exclude olarak ayarlıyorum.
Rapor dosyalarını (frx ve frx) "f:\porgram\raporlar" gibi bir klasörde bulunuyor.
Ben tüm kullanıcıların ayrı ayrı kendi raporlarını kullanmaları içinde c:\ de bir yer tanımlıyorum.

Soru;
f: ve c: yerine veritabana (ms sql 2012 veya 2008) içine bu raporları alıp düzeltme ve kayıt yapabilmem mümkün mü?

Araştırdım. Aşağıdaki kodlar bana yakın geldi. Denemeler yaptım ama sonuç alamadım.

Visual Fox Pro
oB64 = Newobject("base64Helper","base64Helper.prg")

* To save
PUBLIC cFRX, cFRT,cfilename
cfilename="report1"
cFRX = oB64.encodeFile("report1.frx")
cFRT = oB64.encodeFile("report1.frt")
tcsql="INSERT INTO afoo (filename,filedata_frx, filedata_frt) VALUES (?cfilename,?cFRX,?cFRT)"
If SQLExec(appcmds.lnhandle,tcsql) < 0
    Do errhand With tcsql
Endif
 
oB64 = Newobject("base64Helper","base64Helper.prg")
* To load
tcsql="SELECT * FROM [database1].[dbo].[aFoo]"
If SQLExec(appcmds.lnhandle,tcsql,"QREPORT") < 0
    Do errhand With tcsql
Endif
Select QREPORT
oB64.decodeFile(Rtrim(filedata_frx), "report2.frx")
oB64.decodeFile(Rtrim(filedata_frt), "report2.frt")

Visual Fox Pro
PUBLIC cFRX, cFRT,cfilename

cfilename="report1"
cFRX = STRCONV(FILETOSTR('report1.frx'),13)
cFRT = STRCONV(FILETOSTR('report1.frt'),13)
tcsql="INSERT INTO afoo (filename,filedata_frx, filedata_frt) VALUES (?cfilename,?cFRX,?cFRT)"
If SQLExec(appcmds.lnhandle,tcsql) < 0
    Do errhand With tcsql
Endif
 
* To load
tcsql="SELECT * FROM [database1].[dbo].[aFoo]"
If SQLExec(appcmds.lnhandle,tcsql,"QREPORT") < 0
    Do errhand With tcsql
Endif
Select QREPORT
STRTOFILE(filedata_frx,"report2.frx")
STRTOFILE(filedata_frt,"report2.frt")
Bilmediğin Neyse Yanıldığındır.

2

Re: MsSql içinde rapor tasarımı

Fikri olan varmı?

Bilmediğin Neyse Yanıldığındır.

3

Re: MsSql içinde rapor tasarımı

Başlık kafa karıştırıyor "sql içinde rapor tasarımı" derken bu kodlardan anlaşılan kullanıcının her zaman güncel frx dosyalarını kullanması için database içinde saklanması ve her rapor öncesi bu dosyaları oradan çekip kullanması doğru mudur?

4

Re: MsSql içinde rapor tasarımı

Doğrudur.
Kodlarda onu gösteriyor.

Bilmediğin Neyse Yanıldığındır.

5

Re: MsSql içinde rapor tasarımı

2. kod için aşağıdaki satırları değiştir çalışır.

Visual Fox Pro
STRTOFILE(filedata_frx,"report2.frx")

STRTOFILE(filedata_frt,"report2.frt")

Visual Fox Pro
STRTOFILE(Strconv(filedata_frx,14),"report2.frx")

STRTOFILE(Strconv(filedata_frt,14),"report2.frt")

6

Re: MsSql içinde rapor tasarımı

MSSQLde dosyalari varbinary alaninda saklayabilirsin. Herhangi bir cevirime gerek yok, VFP kisminda blob.

7 Son düzenleyen, mrduyar (26.11.2013 16:57:54)

Re: MsSql içinde rapor tasarımı

msayin
Denedim olmadı.

Çetin abi kısa bir örnek veya link gönderebilir misin?

Bilmediğin Neyse Yanıldığındır.

8

Re: MsSql içinde rapor tasarımı

Bu ornek ayni zamanda ODBC bugi gosteriyor, belki sen de ODBC kullaniyorsundur.

Visual Fox Pro
CLEAR

* Test Data yarat - Create test data
lnHandle = SQLSTRINGCONNECT('Driver={SQL Native Client};Server=.\SQLExpress;Trusted_Connection=yes')
CURSORSETPROP("MapBinary",.T.,0)
TEXT TO lcCreate noshow
IF NOT EXISTS ( SELECT  name
                FROM    sys.databases
                WHERE   name = N'ImageDb' )
    Create DATABASE [ImageDb]
ENDTEXT
SQLEXEC(m.lnHandle,m.lcCreate)
SQLEXEC(m.lnHandle,'Use ImageDb')
SQLEXEC(m.lnHandle,'Create Table ImageTable1'+;
    ' (pkId uniqueidentifier rowguidcol default NewID(),'+;
    ' fName varchar(20),lName varchar(20),'+;
    ' personPicture image)')
SQLEXEC(m.lnHandle,'Create Table ImageTable2'+;
    ' (pkId uniqueidentifier rowguidcol default NewID(),'+;
    ' fName varchar(20),lName varchar(20),'+;
    ' personPicture varbinary(max))')
 
 
lcImagePath = _samples + 'data\graphics'
FOR ix=1 TO ADIR(aFiles, ADDBS(m.lcImagePath)+'*.*')
    IMAGE = CREATEBINARY(FILETOSTR(ADDBS(m.lcImagePath)+aFiles[m.ix,1]))
    fname = PROPER(LEFT(aFiles[m.ix,1],4))
    lName = PROPER(SUBSTR(aFiles[m.ix,1],5,4))
 
    SQLEXEC(m.lnHandle, ;
        "insert into ImageTable1 (fName,lName,personPicture)"+;
        " values (?m.fname,?m.lname,?m.image)")
    SQLEXEC(m.lnHandle, ;
        "insert into ImageTable2 (fName,lName,personPicture)"+;
        " values (?m.fname,?m.lname,?m.image)")
ENDFOR
SQLDISCONNECT(m.lnHandle)
* Test Data yarat - Create test data
 
* Form ile goster - Show on a form
PUBLIC oForm1, oForm2
oForm1 = CREATEOBJECT('myFormWithODBC')
oForm1.SHOW
 
oForm2 = CREATEOBJECT('myFormWithADO')
oForm2.LEFT=200
oForm2.TOP=200
oForm2.SHOW
 
DEFINE CLASS myFormWithODBC AS FORM
    DATASESSION = 2
    HEIGHT = 400
    WIDTH = 600
    CAPTION='ODBC - Bug'
 
    ADD OBJECT myGrid1 AS GRID WITH HEIGHT = 200, TOP =   0,WIDTH = 400, RECORDSOURCE = 'Sample1'
    ADD OBJECT myGrid2 AS GRID WITH HEIGHT = 200, TOP = 200,WIDTH = 400, RECORDSOURCE = 'Sample2'
    ADD OBJECT myImage1 AS MyImage WITH LEFT = 410,TOP =   0,HEIGHT=200,WIDTH=190,STRETCH=1
    ADD OBJECT myImage2 AS MyImage WITH LEFT = 410,TOP = 200,HEIGHT=200,WIDTH=190,STRETCH=1
 
    PROCEDURE LOAD
        Set Safety Off
        lnHandle = SQLSTRINGCONNECT('Driver={SQL Native Client};Server=.\SQLExpress;Trusted_Connection=yes')
        CURSORSETPROP("MapBinary",.T.,0)
        SQLEXEC(m.lnHandle,'select * from ImageDb..ImageTable1','Sample1')
        SQLEXEC(m.lnHandle,'select * from ImageDb..ImageTable2','Sample2')
        SQLDISCONNECT(m.lnHandle)
    ENDPROC
 
    PROCEDURE myGrid1.AFTERROWCOLCHANGE
        LPARAMETERS nColIndex
        IF THIS.ROWCOLCHANGE%2 = 1
            THISFORM.myImage1.PICTUREVAL = Sample1.personPicture
        ENDIF
    ENDPROC
 
    PROCEDURE myGrid2.AFTERROWCOLCHANGE
        LPARAMETERS nColIndex
        IF THIS.ROWCOLCHANGE%2 = 1
            THISFORM.myImage2.PICTUREVAL = Sample2.personPicture
        ENDIF
    ENDPROC
 
    PROCEDURE INIT
        THISFORM.myImage1.PICTUREVAL = Sample1.personPicture
        THISFORM.myImage2.PICTUREVAL = Sample2.personPicture
    ENDPROC
ENDDEFINE
 
DEFINE CLASS myFormWithADO AS FORM
    DATASESSION = 2
    HEIGHT = 400
    WIDTH = 600
    oCa1 = NULL
    oCa2 = NULL
    CAPTION="CursorAdapter with ADO - Correct"
 
    ADD OBJECT myGrid1 AS GRID WITH HEIGHT = 200, TOP =   0,WIDTH = 400, RECORDSOURCE = 'Sample1'
    ADD OBJECT myGrid2 AS GRID WITH HEIGHT = 200, TOP = 200,WIDTH = 400, RECORDSOURCE = 'Sample2'
    ADD OBJECT myImage1 AS MyImage WITH LEFT = 410,TOP =   0,HEIGHT=200,WIDTH=190,STRETCH=1
    ADD OBJECT myImage2 AS MyImage WITH LEFT = 410,TOP = 200,HEIGHT=200,WIDTH=190,STRETCH=1
 
    PROCEDURE LOAD
        Set Safety Off
        LOCAL cn AS 'AdoDb.Connection'
        cn = CREATEOBJECT('AdoDb.Connection')
        cn.ConnectionString = "Provider=SQLNCLI10;server=.\SQLExpress;Trusted_Connection=yes"
        cn.OPEN()
        rs1 = cn.Execute("select * from ImageDb..ImageTable1")
        rs2 = cn.Execute("select * from ImageDb..ImageTable2")
 
        THIS.oCa1 = CREATEOBJECT('Cursoradapter')
        THIS.oCa2 = CREATEOBJECT('Cursoradapter')
        THIS.oCa1.DATASOURCETYPE = "ADO"
        THIS.oCa2.DATASOURCETYPE = "ADO"
        THIS.oCa1.ALIAS = 'Sample1'
        THIS.oCa2.ALIAS = 'Sample2'
        THIS.oCa1.CURSORFILL(.F.,.F.,0,rs1)
        THIS.oCa2.CURSORFILL(.F.,.F.,0,rs2)
        cn.CLOSE()
    ENDPROC
 
    PROCEDURE myGrid1.AFTERROWCOLCHANGE
        LPARAMETERS nColIndex
        IF THIS.ROWCOLCHANGE%2 = 1
            THISFORM.myImage1.PICTUREVAL = Sample1.personPicture
        ENDIF
    ENDPROC
 
    PROCEDURE myGrid2.AFTERROWCOLCHANGE
        LPARAMETERS nColIndex
        IF THIS.ROWCOLCHANGE%2 = 1
            THISFORM.myImage2.PICTUREVAL = Sample2.personPicture
        ENDIF
    ENDPROC
 
    PROCEDURE INIT
        THISFORM.myImage1.PICTUREVAL = Sample1.personPicture
        THISFORM.myImage2.PICTUREVAL = Sample2.personPicture
    ENDPROC
ENDDEFINE
 
DEFINE CLASS myImage AS IMAGE
    PROCEDURE PictureVal_Assign
        LPARAMETERS vNewVal
        IF VAL(OS(3)) < 6
            THIS.PICTUREVAL = m.vNewVal
        ELSE
            THIS.PICTURE = ''
            IF EMPTY(THIS.TAG)
                THIS.TAG = FORCEPATH(SYS(2015)+'.pic',SYS(2023))
            ENDIF
            STRTOFILE(m.vNewVal,THIS.TAG)
            THIS.PICTURE = THIS.TAG
        ENDIF
    ENDPROC
    PROCEDURE DESTROY
        THIS.PICTURE = ''
        IF !EMPTY(THIS.TAG)
            TRY
                ERASE (THIS.TAG)
            ENDTRY
        ENDIF
    ENDPROC
ENDDEFINE

9

Re: MsSql içinde rapor tasarımı

Selamlar;
Cetin abi teşekkürler,

Özetle aşağıdaki kod ile işimi hallettim.

Visual Fox Pro
*save

lnHandle=baglan()
lcImagePath = "c:\"
Image = Createbinary(Filetostr(Addbs(m.lcImagePath)+"
report1.frx"))
Image1 = Createbinary(Filetostr(Addbs(m.lcImagePath)+"
report1.frt"))
fname = "
report1"
lName = "
report1"
 
? mySQLExec(m.lnHandle, ;
"
USE [ImageDb] insert into ImageTable2 (fName,lName,personPicture,personPicture1)"+;
"
values (?m.fname,?m.lname,?m.image,?m.image1)")
*load
lnHandle = baglan()
CursorSetProp("
MapBinary",.T.,0)
SQLExec(m.lnHandle,'select * from ImageDb..ImageTable2','Sample2')
SQLDisconnect(m.lnHandle)
 
m.cImagen = "
c:\ra1.frx"
m.cImagen1 = "
c:\ra1.frt"
? Strtofile(Sample2.personPicture, m.cImagen)
? Strtofile(Sample2.personPicture1, m.cImagen1)
Bilmediğin Neyse Yanıldığındır.