Comboboxen nacheinander schalten / SQL Filter setzen

  • VB.NET

Es gibt 20 Antworten in diesem Thema. Der letzte Beitrag () ist von TH-Sulzer.

    Comboboxen nacheinander schalten / SQL Filter setzen

    Hallo Zusammen, folgend 2 Comboboxen die mit Daten gefüllt werden sollen.
    Die erste gibt den Filter für die 2te vor. Die erste funktioniert auch !


    VB.NET-Quellcode

    1. Private Sub FillCBBpumpsize()
    2. Dim dapumpsize As New SqlDataAdapter("Select Pumpsize,ID from GSGPumpTable", con)
    3. Dim dspumpsize As New DataSet()
    4. Try
    5. dapumpsize.Fill(dspumpsize, "Pumpsize")
    6. ComboBox1.DataSource = dspumpsize.Tables("Pumpsize")
    7. ComboBox1.DisplayMember = "Pumpsize"
    8. ComboBox1.ValueMember = "Pumpsize"
    9. Catch ex As ExceptionMessageBox.Show(ex.Message)
    10. End Try
    11. pumpsizeloaded = True
    12. End Sub
    13. Private Sub FillCBBstufen()
    14. Dim dastufen As New SqlDataAdapter("Select noofstages,pumpsize from GSGPumpTable WHERE Pumpsize = " & ComboBox1.Text, con)
    15. Dim dsstufen As New DataSet()
    16. Try
    17. dastufen.Fill(dsstufen, "noofstages") ' HIER KOMMT DER FEHLER !!!
    18. ComboBox2.DataSource = dsstufen.Tables("noofstages")
    19. ComboBox2.DisplayMember = "noofstages"
    20. ComboBox2.ValueMember = "ID"
    21. Catch ex As ExceptionMessageBox.Show(ex.Message)
    22. End Try
    23. stufenloaded = TrueEnd Sub



    Aktuell bekomme ich die Fehlermeldung :
    Fehler beim KOnvertieren des nvarchar werts 'xxxx' in den Int-Datentyp.
    Hat jemand eine Idee ?
    Dank / Gruß
    Timo
    Hallo Erfinder Des Rades,

    Danke für Deinen Hinweis. Typisierte Datasets hören sich gut an. Da ich aber blutiger Beginner bin ist das Prozedere wie unter MSDN beschrieben mir ein wenig zu kompliziert. msdn.microsoft.com/de-de/library/wha85tzb(v=vs.80).aspx. Das ist mir aktuell noch "too much" ;(

    Tatsache ist das ich das Dein Beispiel "QuickDB" bei mir nicht ausführen kann. Der Code sieht vielversprechend

    aus aber:

    Der 'Microsoft.Jet.OLEDB.4.0'-Provider ist nicht auf dem lokalen Computer registriert.

    Diese Meldung liegt ,so viel ich bisher weis, daran dass ich mich auf einer WIn64Bit machine befinde und die 64bit variante der

    MS Database Engine nicht installieren kann da wir gezwungen sind Office in der 32bit version zu fahren. So weit so gut !

    Ich hab mich entsprechend damit abgefunden bzw. bin eingentlich ganz glücklich mit der Vorgehensweise einen SQL server zu nutzen.

    Den kann ich aber in der Express variante nicht per Assistent in meinen Code einbinden sondern muss es über connection string machen.

    1. Schließt diese Vorgehensweise Deinen Vorschlag aus ? ( Typisierete Datasets )

    2. Von meinem Fehler hast Du leider nichts geschrieben.

    3. Dein "NAJA" macht den Eindruck das ich ggf. doch so weiter machen kann wie ich angefangen hab ?

    Dank / Gruß

    Timo
    1. is pech, dass der sample-Code bei dir nicht laufen kann, wg anneren SystemVorraussetzungen, aber die Vorgehensweise mittm Sql-Server ist identisch. Sehr empfehle ich (auch auf meiner Site) die "How Do I" Videos — Visual Basic von MS. Für dich könnte die Sektion "Forms over Data" eine Fundgrube sein (Ich hoffe nur, die ham nicht alles mögliche geändert inne Zwischenzeit)

    2. Mit untypisierten Datasets setze ich mich nicht auseinander. Es ist IMO kein sauberer Stil, untypisiert zu programmieren, wenn für typisiertes Programmieren die Infrastruktur bereitsteht

    3. Sogar die meisten hier im Forum programmieren glaub mit untypisierten Datasets - ich glaub, weil sie vonne Lern-Anforderung überfordert sind.

    Bischen von dem, was man mit typ. Dataset so alles treiben kann, versuche ich in DB-Programmierung ohne Datenbank. coloriertes DatagridView, DataExpressions, EinzelblattView-Post, DgvProgressCell etc. zu zeigen - also z.T. liegt der Schwerpunkt auch auf Datagridview, aber das steht alles auf den Schultern von Databinding.
    Die genannten Samples laufen ohne DB-anbindung.

    ErfinderDesRades schrieb:

    wenn für typisiertes Programmieren die Infrastruktur bereitsteht

    ErfinderDesRades schrieb:

    aber die Vorgehensweise mittm Sql-Server ist identisch

    Danke für Deine Links ! Konnte noch nicht alle anschauen aber zumindest die HOW DO I ... Allerdings arbeitet da so wie es aussieht jeder mit der Professional Version von VB 2010 oder 2008. Das bedeutet ich muss mich von Express verabschieden um so programieren zu können. Ich kann nicht einfach eine Neue Datenquelle mit ein paar klicks hinzufügen. Um unabhängig zu sein will ich einen SQL Server für die Datenbank nutzen (Netzwerk ) . Somit bin leider gezwungen bei Express mit code zu arbeiten. Verstehe ich Dich hier richtig ? Du sagst auf der einen Seite das die vorgehensweise identisch ist meinst aber die Infrastruktur von Professional ? Wenn es auch mit code geht muss ich mich ja nur auf die MSDN seite stürzen - aber irgentwie glaube ich das es nicht so einfach ist.

    Dank / Gruß

    Timo
    Nur so am Rande...
    um die Fehlermeldung

    Der 'Microsoft.Jet.OLEDB.4.0'-Provider ist nicht auf dem lokalen Computer registriert.

    zu entfernen musst du Dein Programm für eine x86 CPU kompilieren.

    Das geht über Projekt-Eigenschaften -> Kompilieren -> erweiterte Kompiliereinstellungen

    Dort wählst Du als Ziel-CPU x86 aus. Dann läuft's.

    Gruß
    Dirk
    Danke Kinobi aber dann funktioniert die Anwendung für welche die DLL gedacht ist nicht mehr !
    Diese ist ein 64bit CAD program welche die DLL über die API schnittstelle einbindet.
    Hast Du ggf. eine Idee wegen des anderen Fehlers? ( nvchar .... )
    Gruß Timo

    @edr
    Bin mir nicht sicher was 2008 macht und ob Du mit Deiner Aussage bzgl. 2010 richtig liegst. Ich weis das Lokale Microsoft SQL Server eingebundem werden können. Und auch SQL Compact. Aber wenn es darum geht einen x-beliebigen SQL server einzubingen dann liegst Du glaub ich falsch. Jedenfals sagt mir mein BUCH das dies nur mit Professional geht.

    Danke trotz dem
    Gruß Timo

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „TH-Sulzer“ ()

    Ich verstehe nicht den Unterschied zw. lokalem SQL-Server und x-beliebigen SQLServer.
    Natürlich würde ich mit einem lokalen SQLServer entwickeln, schon weil einfacher zu debuggen, und zu modifizieren.
    Wenn dann im Großen und Ganzen fertig, ändere ich den ConnectionString, zur Not auch, indem ich in der Config-Datei herumfummel.
    Wie wollte Microsoft das verhindern?
    Ich versteh Dich einfach nicht Erfinder des Rades.

    Szenario:
    --> MS Express 2008 SQL datenbank in VB2010 Express über Assistent einfügen .
    Bedeutet das lokale MDF file als neue Datenquelle aufrufen und VB macht mir daraus ein ...dataset.xsd und ne app.config.
    und nun soll ich den connection string in der App.config auf einen anderen Server und einen anderen Provider umändern ?

    XML-Quellcode

    1. <?xml version="1.0" encoding="utf-8" ?><configuration>
    2. <configSections></configSections>
    3. <connectionStrings>
    4. <add name="GrundplatteGSG.My.MySettings.GSGGrundplatteConnectionString"
    5. connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\GSGGrundplatte.mdb"providerName="System.Data.OleDb" />
    6. <add name="GrundplatteGSG.My.MySettings.GSGGrundplatte_2SQLConnectionString"
    7. connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\Hartfelder\Documents\GSGGrundplatte#2SQL.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"providerName="System.Data.SqlClient" />
    8. </connectionStrings><system.diagnostics>
    9. <sources><!-- Dieser Abschnitt definiert die Protokollierungskonfiguration für My.Application.Log -->
    10. <source name="DefaultSource" switchName="DefaultSwitch"><listeners>
    11. <add name="FileLog"/><!-- Auskommentierung des nachfolgenden Abschnitts aufheben, um in das Anwendungsereignisprotokoll zu schreiben -->
    12. <!--<add name="EventLog"/>--></listeners>
    13. </source></sources>
    14. <switches><add name="DefaultSwitch" value="Information" />
    15. </switches><sharedListeners>
    16. <add name="FileLog"
    17. type="Microsoft.VisualBasic.Logging.FileLogTraceListener, Microsoft.VisualBasic, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"initializeData="FileLogWriter"/>
    18. <!-- Auskommentierung des nachfolgenden Abschnitts aufheben und APPLICATION_NAME durch den Namen der Anwendung ersetzen, um in das Anwendungsereignisprotokoll zu schreiben --><!--<add name="EventLog" type="System.Diagnostics.EventLogTraceListener" initializeData="APPLICATION_NAME"/> -->
    19. </sharedListeners></system.diagnostics>
    20. </configuration>



    Ich glaube wir brechen die Diskussion hier ab ! Macht wirklich keinen Sinn aneinander vorbei zu reden. Das eigentliche Problem ( Comboboxen ) ist in die Ferne gerückt !
    Und leider verstehe ich "herumfummel" und "connectionString ändern " in der Art wie Du es beschreibst nicht ! Das ist leider für mich als Anfänger zu ungenau.

    FAKTEN:
    Ich kann mir meiner Installation von VB 2010 Express keinen SQL Server Vom Netzwerk über den Assisten einbinden
    Nur Lokale MDF Datei, Access Datenbanken und lokale SDF files (siehe Bilder)

    Danke für Deine Unterstützung aber wir kommen so nicht weiter. Oder Doch ?

    Gruß Timo
    Bilder
    • DB#7.JPG

      86,54 kB, 808×593, 141 mal angesehen
    • DB#8.JPG

      68,43 kB, 676×524, 158 mal angesehen

    TH-Sulzer schrieb:

    Szenario:
    --> MS Express 2008 SQL datenbank in VB2010 Express über Assistent einfügen .
    Bedeutet das lokale MDF file als neue Datenquelle aufrufen und VB macht mir daraus ein ...dataset.xsd und ne app.config.
    und nun soll ich den connection string in der App.config auf einen anderen Server und einen anderen Provider umändern ?

    genau das meine ich.

    Nur das du die umänderung nicht "nun" machen sollst, sondern erst, wenn deine App funzt.

    guck, hier habich einen funktionierenden connectionstring:
    "Data Source=www.aUrl.de;initial catalog=GuteDB;Persist Security Info=False;User ID='aUser';Password='aSecretPassword'"

    Das kann man doch sicherlich in obige Config einpasten.

    Aber an deine Bilder sehe ich grad, du verwendest SqlCompact, und nicht SqlServer.

    ErfinderDesRades schrieb:

    Das kann man doch sicherlich in obige Config einpasten.

    Nein --> Das kann ich nicht !



    Meine Verbindung funktioniert übrigens einwandfrei. Also ich benötige keinen funktionierenden string.

    Ich benötige eine Vorgehensweise die Comboboxen nacheinanderzuschalten !!!

    VB.NET-Quellcode

    1. Imports System.Windows.Forms
    2. Imports System.DataImports System.Data.SqlClient
    3.  
    4. Public Class Dialog1
    5. Public con As New SqlConnection
    6. .
    7. .
    8. .
    9. Private Sub ConnectToSQL()
    10. Dim cmd As New SqlCommand
    11. Try
    12. con.ConnectionString = "Data Source=PUDEW7006\SQLEXPRESS;Initial Catalog=GSGGrundplatteSQL;Integrated Security=True"
    13. con.Open()
    14. Catch ex As Exception
    15. MessageBox.Show("Error while connecting to SQL Server." & ex.Message) 'Finally
    16. End TryEnd Sub

    Also warum soll ich nun die XML editieren ? Und unnötige Zeit verschwenden. Ich will den Assistent nicht nutzen und ich will die Datenbank nicht adden. Ich möchte per Code verbinden und einigermaßen up to date Programieren. Ohen Professional und wenn es nicht anders geht leider auch ohne typisierung .
    Dank / Gruß
    Timo

    TH-Sulzer schrieb:

    up to date Programieren ... ohne typisierung

    Das ist ein widerspruch.

    Ich bin draußen.
    Mach du man weiter ohne die ADO.Net-Infrastruktur zu nutzen, ohne Databinding und ohne Trennung von Gui und Daten.

    Geht auch - fiel fergnügen.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()

    guckma, SqlServer scheints auch für umsonst zu geben. Jdfs. fund ich beimir eine "SQLEXPRWT_x86_DEU.txt" - Datei, des Inhalts:
    Microsoft® SQL Server® 2008 Express with Tools

    microsoft.com/downloads/detail…05e9bd4e28&DisplayLang=de

    Kurzbeschreibung
    Microsoft SQL Server 2008 Express with Tools ist eine kostenlose, leicht zu verwendende Version von SQL Express, die zahlreiche Features beinhaltet und das Entwickeln leistungsstarker, datengesteuerten Anwendungen für Web- oder lokale Desktopentwicklungen leichter denn je macht.
    Damit dürfte selbst das rumfummeln in der Config erledigt sein, und dein buch scheint Müll zu erzählen, wenn da wirklich drinsteht, dass man nur mit vollversionen netz-DBs nutzen kann.
    Hallo ?

    Hast Du nicht meinen ConnectionString gesehen.

    VB.NET-Quellcode

    1. con.ConnectionString = "Data Source=PUDEW7006\SQLEXPRESS;Initial Catalog=GSGGrundplatteSQL;Integrated Security=True"


    Der lokale SQL Express Server läuft doch bei mir schon seit Ewigkeiten !

    --> Da kann ich auch mit verbinden !

    --> Funktioniert einwandfrei !

    --> Das ist nicht mehr mein Problem edr !

    Installiere doch mal die 2010er VB Express version. Wirst schon sehen was da geht und was nicht.

    Die diskussion welche Du hier eingebracht hast wirft nun mal die Frage auf ob ich nun auch ohne Assi und Professional

    typisieren kann oder nicht ? Ein einfaches Ja oder Nein tuts . Wir können auch ein neuen Beitrag eröffnen aber hier möchte ich eigentlich

    Über die Comboboxen reden.

    Danke für Deine Anteilnahme - ggf.tschüs

    Gruß Timo
    vom untypisierten programmieren abstand nehmen und mit typisiertem Dataset arbeiten. das war die ganze zeit mein vorschlag, und der ändert sich auch nicht.
    typischerweise stimmt beim untypisierten programmieren der key nicht, obwohl ich das in diesem fall nicht recht in Verbindung mit der Fehlermeldung bringen kann.
    im codesample

    VB.NET-Quellcode

    1. dastufen.Fill(dsstufen, "noofstages") ' HIER KOMMT DER FEHLER !!!
    2. ComboBox2.DataSource = dsstufen.Tables("noofstages")
    "noofstages" ist zb son key.
    Aber beim untypisierten programmieren treten so keys an jeder ecke auf - wie gesagt: findich kontraproduktiv, wennichjetzt diesen Holzweg vertiefe.