Domanda

Per prima cosa, non posso sopportare di cristallo! Okay, questo è il mio petto ...

Ora, abbiamo un vecchio VB6 app manteniamo per un cliente, che usa la libreria di cristallo di automazione per programatically modificare le formule di selezione record di un gruppo di Crystal Reports 8.5 rapporti.

Ci sono due relazioni che sono quasi identici. Ho dovuto cambiare loro di recente per aggiungere un altro campo da un'altra tabella. Quando ho aggiunto la tabella per i rapporti, però, mentre ha aggiunto che nella finestra di progettazione visiva, non ha inserirlo nella clausola FROM dell'istruzione SQL. Così, ho modificato manualmente l'istruzione SQL per aggiungere nel supplementare join. KO, funziona alla grande. Se si esegue il report in modalità di anteprima di cristallo, funzionano esattamente come previsto.

Ora, gli utenti è andato a testare le modifiche da dentro l'applicazione di VB. Uno dei rapporti funziona bene e dandy. L'altro rapporto però, non riesce a impostare la formula di selezione come previsto.

Il codice imposta le formule di selezione utilizzando la funzione PESetSelectionFormula. Ho verificato che la stringa viene passata in alla funzione come la nuova formula selezione è corretta tramite un passo attraverso l'esame delle variabili. La chiamata a PESetSelectionFormula sembra funzionare bene, e restituisce un valore di 1, che il più vicino posso trovare da nessuna parte indica il successo. (L'altra relazione, che sta funzionando benissimo dal codice è anche tornando 1).

Tuttavia, la relazione non riesce con un errore: Error Code: 534 - Error detected by database DLL. Il codice, a scopo di debug discariche fuori la stringa SQL attualmente utilizzata dal rapporto. Lo SQL che esce dal rapporto è:

SELECT ... FROM ... 
WHERE

ORDER BY ...

Come si può vedere, la clausola WHERE è vuoto, che immagino è per questo che la DLL database è upchucking su questa informativa. Non capisco il motivo per cui la libreria di automazione non è l'impostazione della clausola WHERE, anche se la chiamata a PESetSelectionFormula sta passando una stringa valida e sta tornando il successo. Ho pensato che forse era perché avevo modificato manualmente il codice SQL nella relazione per aggiungere la tabella non è stato aggiunta, ma ho fatto la stessa cosa in un altro rapporto quasi identico, e che uno sta funzionando benissimo.

Qualcuno ha qualche idea per questo PESetSelectionFormula potrebbe segnalare il successo, ma in realtà non fare nulla?

P.S. Ho già provato a fare un Database> Verifica database dai menu, e che dicono che il rapporto era tutto a data e non ha aiutato affatto.

È stato utile?

Soluzione 3

Va bene, questo è tipico di questo che ho appena disprezzo Crystal Reports.

Il mio capo è tornato dalle vacanze, e lo guardò, ... non ha fatto nulla, e ora funziona. Mi ha mostrato esattamente quello che ha fatto, e lui non ha cambiato o nulla per il rapporto, solo la stessa procedura di debug che avevo preso, ma ora funziona magicamente.

ho veramente piace un software che solo automagicamente si ferma e inizia a lavorare in questo modo. Grazie per le idee.

Altri suggerimenti

Non ho mai usato PESetSelectionFormula , ma ho incontrato problemi di importazione dei dati altrimenti accettabili:

  1. Il vostro SQL finale Query utilizzare qualsiasi funzione non comuni, vale a dire nz ()? Cristallo non sempre riconosce le funzioni di VB, imho.

  2. Avete valori nulli nei dati importati che stanno creando conflitti?

  3. Dopo aver raccolto i dati, si può mettere in una tabella temporanea e dire di cristallo di raccogliere i dati da tale tabella temporanea? Se hai problemi con 1 o 2 # #, questo può essere una buona soluzione.

In alcune versioni di CR, l'PESetSelectionFormula aggiunge il nuovo valore alla formula record di selezione esistente, in altre versioni, PESetSelectionFormula sostituisce la formula record di selezione esistente con il nuovo valore.

non mi ricordo quando si è verificato questo interruttore, ma dovrebbe essere facile per voi per determinare quale comportamento si sta verificando.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top