Newsgroup: it.comp.lang.vo-clipper
Titolo: utilizzo di report pro con Mysql

Sto provando a gestire una stampa passando a report pro una query (su 3
tabelle) ed una tabella che è l'unica
che varia rispetto a quanto definito nella costruzione del documento di
report pro.
La query funziona ma al momento di visualizzarmi l'anteprima mi apre un
error subsystem:0000 se sono inseriti dei
campi della tabella che cambia (Tempscheda). Io per variare la tabella uso
questa funzione:
oReport:SetTableStringAttribute (1, "Tempscheda",SQLTABLE_ATTR_TABLE,
cTable) che mi da esito positivo
ma sono convinto che report pro dopo la query mi vada ancora a cercare i
campi di Tempscheda invece che di cTable
non trovando cosi' corrispondenza con la query.
Avete qualche idea sul problema o magari qualche esempio di utilizzo simile
a questo?
grazie a tutti anticipatamente

Io sto utilizzando Report pro con mysql, ma tramite dbf e non odbc. Creo dei
dbf al volo per la stampa da una query e stampo.
Mi dispiace non poter esserti d'aiuto.
                                Francesco.

Provando un odio viscerale per ODBC ci siamo scritti una DLL per accesso
diretto a MySql, naturalmente restava il problema della stampa.
L'ho risolto creando al volo un DBF (locale) da una query dei dati da
stampare ecco la funzione, come vedi utilizzo le funzioni DBxxxx che si
trovano nella DLL System quindi non devi linkare la DLL degli RDD nella tua
applicazione, essendo Report Pro 3.x un OCX poi se la vede lui, col 2.X devi
linkare anche gli RDD:
FUNCTION Export2Dbf(cQuery,cNome)
// cQuery: la query fonte dei dati da stampare:
// es:
// cQuery := [SELECT * FROM ana_fat,fatture ]+;
//   [LEFT JOIN clienti ON fatture.cliente = clienti.codice ]+;
//   [LEFT JOIN banche  ON fatture.banca = banche.row_id ]+;
//   [WHERE ana_fat.num_fat="]+SELF:oDCNUM_FAT:Value+["]+;
//   [ and ana_fat.num_fat = fatture.num_fat]
//
// cNome il nome del file DBF in cui esportare i dati.
LOCAL oServer AS MySqlSelect
LOCAL n,i AS DWORD
LOCAL aStruct AS ARRAY
LOCAL cFildName AS STRING
LOCAL nVal AS DWORD
IF IsNil(cNome)
 cNome := WorkDir()+"stampa"
ELSE
 cNome := WorkDir()+cNome
ENDIF
IF File(cNome+".DBF")
 nVal := 0
 DO WHILE !CanOpen(cNome+".DBF")
  Sleep(2000)
  ++nVal
  IF nVal > 60
   RETURN FALSE
  ENDIF
 ENDDO
ENDIF
IF File(cNome+".DBF") .AND. !DeleteFile(String2Psz(cNome+".DBF"))
 DBCLOSEALL()
 IF !DeleteFile(String2Psz(cNome+".DBF"))
  Mostra("Attenzione non è stato possibile aggiornare i dati di
stampa;"+CRLF+;
    "Chiudi tutte le applicazioni prima di riavviare il programma.")
 ENDIF
 RETURN FALSE
ENDIF
DeleteFile(String2Psz(cNome+".FPT"))
oServer := MySqlSelect{cQuery}
IF oServer:Used
 aStruct := oServer:DBStruct
 FOR n := 1 UPTO ALen(aStruct)
  IF SLen(aStruct[n,1]) > 12
   cFildName := Left(aStruct[n,1],12)
   i := 0
   DO WHILE aMscan(aStruct,cFildName) > 0
    cFildName := Left(cFildName,11)+NTrim(i)
    ++i
   ENDDO
   AFill(aStruct[n],cFildName,1,1)
  ENDIF
  IF aStruct[n,2] = "O"
   AFill(aStruct[n],"M",2,1)
  ENDIF
 NEXT
 DBCREATE(cNome,aStruct,"DBFCDX")
 IF DBUSEAREA(FALSE,"DBFCDX",cNome)
  DO WHILE !oServer:EOF
   DBAPPEND()
   FOR n := 1 UPTO oServer:FCount
    FIELDPUT(n,oServer:FIELDGET(n))
   NEXT
   oServer:Skip(1)
  ENDDO
  IF RECCOUNT() = 0
   DBAPPEND()
  ENDIF
 ENDIF
 DBCLOSEAREA()
 oServer:Close()
ENDIF
RETURN TRUE
*****************************************************
FUNCTION CanOpen(cFile AS STRING) AS LOGIC
LOCAL  siHandle AS PTR
LOCAL  lRet := FALSE AS LOGIC
siHandle := FOpen(cFile,FO_EXCLUSIVE)
IF !(siHandle == F_ERROR)
 lRet := TRUE
 FClose(siHandle)
ENDIF
RETURN lRet
***************************************************
FUNCTION Mostra(cFrase ,cCaption)
LOCAL  oWB AS TEXTBOX
cCaption := iif(IsNil(cCaption),"Nota",cCaption)
oWB:= TextBox{ ,cCaption,cFrase}
oWB:type := BOXICONEXCLAMATION  + BUTTONOKAY
oWB:Show()
RETURN  NIL