+1 800 256 3608 (toll-free in North America) or +49 7531 90 60 10| service@combit.com

Mehrere Tabellen an Designer übergeben


(Guest) #1

Hallo,

ich arbeite mit Firebird 2.5 als Datenbank und .net zur Entwicklung der GUI.

Die Anbindung an LL18 funktioniert mit dem firebird.net Provider einwandfrei.
[url=http://www.combit.net/knowledgebase?action=display&articleid=KBTD000822

Wie][/url] könenn jedoch mehrere Tabellen an einen Report übergeben werden?

Besten Dank im Voraus

Nikolaus Kern


(Guest) #2

Hallo,

ich denke das man dafür evtl. den DbCommandSetDataProvider von LL verwenden kann - siehe dummy-code:

string connectionString = “Database=C:\PROGRAM FILES\FIREBIRD\FIREBIRD_2_5\EXAMPLES\EMPBUILD\EMPLOYEE.FDB;User=SYSDBA;Password=masterkey;Dialect=3;Server=localhost”;
IDbConnection dbcon = new FbConnection(connectionString);
dbcon.Open();

IDbCommand dbcmdCustomers = dbcon.CreateCommand();
string sql = “SELECT * FROM Customers”;
dbcmdCustomers.CommandText = sql;

IDbCommand dbcmdOrders = dbcon.CreateCommand();
string sql = “SELECT * FROM Orders”;
dbcmdOrders.CommandText = sql;

DbCommandSetDataProvider provider = new DbCommandSetDataProvider();
provider.AddCommand(dbcmdCustomers , “Customers”);
provider.AddCommand(dbcmdOrders , “Orders”);
provider.AddRelation(“Customers2Orders”, “Customers”, “Orders”, “CustomerID”, “CustomerID”);
LL.DataSource = provider;
LL.Design();


(Guest) #3

Hallo Oliver,

vielen Dank für die Antwort.

Soweit kann ich mit dem von Dir vorgeschlagenen Weg alles machen, beim Aufruf von Design() knallt es dann:

Dynamic SQL Error
SQL error code = -206
Column unknown
LLKEYVAL0
At line 1, column 65

Im Objekt DbCommandSetDataProvider sehe ich die beiden SQL Abfragen sauber drinnen.

Beim Suchen bin ich folgenden Eintrag gestoßen konnte aber die Lösung dort nicht nachvollziehen.

Grundsätzlich muss ich den Firebird .net Provider nicht verwenden, wenn es mit anderen Mitteln (z.B. ODBC) auch geht.

Danke im Voraus

Niko


(Guest) #4

Ich kenne ich da nun im Firebird-SQL leider nicht sehr gut aus… aber ich denke, dass es hier ggf. was der Formatierung der Trenzeichen und der Parameter der SQL-Syntax zu tun haben könnte.
Schau dir mal die Überladung von .AddCommand() an. Hier kann man eben genau diese Formatierung angeben… steht so auch in der .NET Hilfe. Wie die nun bei Firebird aussehen muss kann ich dir auf die Schnelle leider nicht sagen.


(Guest) #5

Sehr geehrter Herr Kern,
vielen Dank für Ihren Beitrag.

Wie Herr Hambrecht richtig erkannt hat liegt das Problem hier bei der Erkennung des Parameter Formats, in MySql würde es z.B. so ausschauen:
Provider.AddCommand(cmd, name, “{0}”, “?{0}”); //Formatfür die Parameter ->"?{0}"

Auszug aus der .NET Hilfe:

[quote]identifierDelimiterFormat
Das Trennzeichen-Format für die Bezeichner. SQL Server und Oracle verwenden doppelte Anführungszeichen als Trennzeichen wohingegen Access eckige Klammern verwendet. Für diese Typen brauchen Sie eigentlich nicht das Schema übergeben, da dies automatisch mit der Verwendung der Überladung AddCommand(IDbCommand,String) Method geschieht. Für Access wäre das Schema “[{0}]”, wohingegen die Bezeichner im SQL Ausdruck mit Klammern getrennt werden sollten (Select * from [Customers]).
parameterMarkerFormat
Das Parameter-Format. SQL Server verwendet “@{0}” wohingegen Access “?” verwendet. Für die .NET Framework Verbindungstypen wird das korrekte Format automatisch gewählt, für Ihren eigenen Provider müssen Sie hier ggf. das Format anpassen.[/quote]

Nachdem Sie das korrekte Format übergeben habe, müsste die Abfrage das gewünschte Ergebnis liefern.
Mit freundlichen Grüßen

Erdal Alacali
Technischer Support
combit GmbH