Laden...

Forenbeiträge von kingpin166 Ingesamt 8 Beiträge

14.06.2012 - 10:47 Uhr

Danke erstmal für die Antworten.
Nagut ich weine dem Recordset nicht mehr nach 😉. Es ist nur so, dass ich eine Datenbankapplikation die mit VBA in Access geschrieben wurde auf C# .Net portieren muss. Und in dem Code von VBA sieht einiges wesentlich "entspannter" und weniger aufwendig aus.

Die Konstrukte von DataSet und DataTable finde ich in .Net schon mal sehr gut gelöst.
Ich habe auch gesehen, dass es typisierte DataSets gibt, die ein paar Vorteile gegenüber den untypisierten haben.
Wenn man in C# nun mit typisierten DataSets arbeiten will muss man immer eine Projektdatenquelle angeben. Das geht auch alles sehr easy von der Hand muss ich sagen, aber ich habe ein Problem damit.
Mein Programm wird nicht mit einer Datenbank arbeiten, sondern ich muss die Möglichkeit haben die Datenbank dahinter zu wechseln (Struktur in der DB ist immer gleich). Bei der Projektdatenquelle wird irgendwo der ConnectionString abgespeichert. Wie stell ich das nun am günstigsten an, dass ich in meinem Programm sowohl den Server als auch den DB Namen wechseln kann und trotzdem mit typisierten DataSets arbeiten kann ? Der ConnectionString steht m.W. in irgendeiner Ressourcendatei in XML, aber komm ich da ran um ihn zu ändern ? Mir scheint, als sei diese Art von Programm (wechselnde Datenbanken) nicht vorgesehen. Dabei kann ich mir aber nicht vorstellen, dass man nicht den DB Server auswählen kann.. und das wäre ja das selbe Problem eigentlich.

12.06.2012 - 16:30 Uhr

Sorry vielleicht geh ich ja zu naiv an die Sache ran..

Wenn ich eine etwas komplexere Anfrage an meine Datenbank schicke, dann habe ich mind. 4 mal JOIN benutzt.

Bsp:
Select table1.a, table2.c, table4.e, table5.e from
table1 left outer join table on table1.b = table2.b inner join....

Also wo ist für dich der Unterschied zwischen Abfrage und Join ?

11.06.2012 - 17:28 Uhr

verwendetes Datenbanksystem: <SQL Server 2005>
C# .Net 3.5 - Windows Forms Application

Moin,

ich möchte eine Tabelle in meiner Datenbank füllen deren Inhalt sich aber über mehrere Fremdschlüssel bestimmt. Ich wähle also vorher in einer entsprechenden Eingabemaske die Filter aus und habe dann eine SQL Anfrage mit mehreren Joins und Tabellen. Das Ergebnis lasse ich mir in einem DataGrid darstellen.
Soweit so gut.

Nun geht es aber ans Update, bzw Insert.
Mit der BindingSource komme ich nicht weiter, da ich in der Tabelle, welche ich Updaten möchte einen zusammengesetzten Schlüssel habe.
Der CommandBuilder unterstützt nur INserts und Updates auf einer Tabelle (wie sinnvoll ist das überhaupt ?? Hat man nicht mindestens immer 2 oder 3 Tabellen im Join ?).
Der TableAdapter kann auch nur mit einer Tabelle arbeiten.

Also wie kriege ich es hin ein Update bzw. Insert zu realisieren ? Unter VBA gab es das Recordset. Einfach einlesen mit zig Joins.. ändern und zack Update. Wieso geht das unter C# nicht ?

Vielen Dank

04.02.2012 - 18:44 Uhr

Ich merk schon ich drück mich undeutlich aus 😁

Also ich weiß, dass ich den ConnectionString immer selbst anpassen kann.
Mir gehts eher darum, ob ich die Funktion "Datenquelle hinzufügen" im Visual Studio auch für dynamische Datenbanken nutzen kann. Das Schema in den Datenbanken ist ja immer das Selbe.
Dieser Automatismus bietet einige Vorteile, wie z.B. das Navigieren durch Datensätze oder die Generierung von Eingabeformularen.

Die Namen der Datenbank folgen einem Schema wie S-xxxx_abc

04.02.2012 - 17:59 Uhr

Hi,

danke erstmal für die Antworten...

Zu den vielen Datenbanken. Die müssen leider sein, Hintergrund ist dass die Daten welche in einer Datenbank erzeugt werden nicht mehr verändert werden dürfen. Daher wird nach Beendigung der Arbeit mit einer Datenbank diese extern archiviert.
Also es bleibt dabei, es muss eine Möglichkeit geben innerhalb der Anwendung die Datenbank auszuwählen und dann nur mit dieser zu arbeiten.

Mein Problem ist eigentlich nur, wie ich das am elegantesten löse. Ich muss später auch noch durch die einzelnen Datensätze navigieren und in Abhängigkeit von Schlüsseln den Inhalt der DataGridViews anzeigen.
Unter Access ist vieles einfach schon vorgegeben, so dass man die gesamte Navigation nicht selber machen muss.
Bei C# , bzw. dem Visual Studio scheint das nur dann zu funktionieren, wenn die Anwendung mit einer einzigen Datanbankdatei arbeitet (*.mdb etc..)

04.02.2012 - 00:26 Uhr

Hallo,

ich versuche mal mein Vorhaben zu schildern. Ich bin dabei eine Datenbankanwendung, welche derzeit mit einem Access Frontend und einer SQL Datenbank läuft nach C# zu portieren.
In der Anwendung werden Datenbanken angelegt und mit ihnen gearbeitet. Es wird auch innerhalb des Programms zwischen den Datenbanken gewechselt. Pro Monat wird eine neue Datenbank erstellt und damit gearbeitet.

Nun möchte ich in C# die Oberfläche neu schreiben, SQL Server soll weiterhin als Quelle dienen. Nun frage ich mich, wie ich das Befüllen der Datenbank (10 Tabellen, miteinander verknüpft) mit DataGridViews am besten hinbekomme. Ich habe schon rumprobiert, aber ich finde das alles recht umständlich.
Im Visual Studio kann ich zwar wunderbar eine Datenquelle hinzufügen, aber das bringt mir nichts, weil ich zur Laufzeit zwischen den Datenbanken auf einem Server wechseln muss. Das führt mich zu Problem Nr. 2. Wie kann ich für mein Programm (MDI-Applikation mit mehreren Forms) am besten global die Bindingsource für die DataGridViews festlegen ? Ich möchte nachher auch in den DataGrids Einträge hinzufügen und ändern können. Wie gesagt, das ganze muss zur Laufzeit variabel sein. Bisher habe ich das so gelöst, dass ich eine statische Klase habe in dem ich den Servernamen und die aktuell gewählte Datenbank halte, damit die GridViews eben immer diese Datenbank als Source nehmen. Allerdings kann ich so kein Update ausführen und keine Änderungen in die Datenbank schreiben.

Wie würdet ihr das am geschicktesten lösen ?

Vielen Dank für eure Gedanken !

15.07.2005 - 22:45 Uhr

Moin,

und danke 👍

Das hat mir schon mal nen bissel weiter geholfen.
Also der Tarifrechner solls nicht übertreiben, als letztlich wird vom Benutzer nur angegeben wieviel Minuten er zur Hauptzeit ins Festnetz Telefoniert oder in andere Netze usw... also eine komplette Maske runter.
Habe das Program schon zu 70 % fertig gehabt in Delphi, aber komplett ohne OOP und ein wenig umständlich in der Berechnung.

Das Problem denke ich wird sein eine einheitliche Berechnung zu finden, die für alle Tarife gilt. Denkbar ist natürlich erst einmal davon auszugehen, dass man die Preise für HZ, NZ mal der eingegebenen Minuten nimmt und dann aufaddiert.
Aber die Tarife sind mitlerweile so mit Extras voll, u.a Freiminuten, die nur ins eigene Netz gelte oder eben auch Tarife, wo die ersten 20-30 € nicht berechnet werden, sondern mit der Grundgebühr verrechnet.

Wenn ich das richtig verstanden habe könnte ich also sagen, dass der Vodafone 50,100,200 (falls bekannt 😉 ) in eine Unterklasse werfen, die Volumentarif heißt und den Genion Home und Prepaid in Zeittarif , welche dann ihre Berechnung anders ausführen.

So dann muss ich gleich nochmal ein wenig vorgreifen:
Wie lege ich die Daten für die Tarife am besten in meine txt, bzw xml Datei ab ?
Dachte dabei an das Format:
[Tarifname]
::fn_hz == 0.05
::fn_nz == 0.03
::sms == 0.18
...
... usw.
[Tarifname2]

Und gleich die nächste Frage hinterher. Wäre es nicht sinnvoller in C# xml Dateien zu benutzen oder sind txt einfacher zu händeln mittels String auslesen usw ?

15.07.2005 - 22:14 Uhr

Moin,

bin dabei einen Tarifmanager für meinen alten Chef zu schreiben. Es geht dabei um Mobilfunkverträge.
Die Sache der Berechnung usw ist easy und auch nicht das Problem, aber da ich gerade erst angefangen habe mich mit objektorientierter Programmierung zu beschäftigen bin ich immer noch am rätseln, wie ich die Welt eines Tarifkalkulators auf Klassen und Objekte runterbreche.

Hier meine Vorstellung.
Ich definiere mir eine Klasse "TARIF" und zu ihr gehören Unterklassen mit den jeweiligen Namen der Tarife. In der Oberklasse "TARIF" stehen die Attribute wie Kosten für Festnetz Hauptzeit, Festnetz Nebenzeit, SMS usw usw usw...
In den Unterklassen stehen jetzt die konkreten Werte für die Attribute.
Dann besitzt die Oberklasse eine Methode "berechne_tarif", welche vererbt wird und von jeder Unterklasse anders behandelt wird (Stichwort: Polymorphism).

Die ganzen Minutenpreise für HZ, NZ usw wollte ich seperat in eine txt oder xml Datei speichern, so dass man die auch mal fix ändern kann und nciht in den Quellcode dafür muss. Schließlich soll mein Chef das bedienen können.

Was ihr jetzt machen sollt ist eigentlich nur folgendes:
Sind meine Gedanken so richtig bis jetzt, also läßt sich auf diese Art und Weise ein Programm schustern ?
Bedenkt bitte ich stehe am Anfang mit OOP und die Grundbegriffe sind mir bisher nur durchs Lesen in Büchern bekannt sowie ein wenig durch "pyhthon" und "object pascal"

mfg
und vielen dank schon mal für Ratschläge