Auf SpeechSynthesizer() Ende der Sprachausgabe in einer Sub warten

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 36 Antworten in diesem Thema. Der letzte Beitrag () ist von Westerwälder.

    Westerwälder schrieb:

    siehe Post 3
    Da sehe ich gar nix.
    Warum soll Maus und Sprache synchronisiert werden?
    Mach Dir ein Lautsprecher-Icon, und wenn Du da drauf klickst, wird was erzählt.
    Feddich.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    zu Post 3)
    hier wird der Text "Anwendungen. hier findest du die Standardprogramme" akustisch ausgegeben.
    wenn ich die maus nicht auf den ToolStripDropDownButton führe und einen Mausclick auslöse,
    werden die Untereinträge nicht angezeigt. Wie soll ich sie denn (im Sinne einer Programmtour) beschreiben?

    Clicke ich in dem Moment auf ein Lautsprecher-Icon, verschwindet der MenuetoolItem.
    Denke ich werde das morgen mit der list of mal versuchen.
    Gruß Markus

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Westerwälder“ ()

    Ich weis ja das hier und da anecke, mit Rod oder auch mit Erfinder des R.
    Welche ich beide sehr schätze.
    Möchte mir einfach meine Optionen lassen.
    Habe mein erstes Programm 1985 geschrieben weil die Bank Sparkassenobligationen nicht im System verwalten konnte (auf einem C64).
    Und was hat sich seitdem alles geändert.
    Telefax, Handy, Email usw.
    Möchte das ein Programm und gerade die damit verbundene Datenverwaltung flexibel bleibt und nicht immer den Vorgaben des VB-Designer folgen muss.
    Was möchte ich denn damit sagen? Soll ich Microsoft folgen, auch wenn die Fehler machen?
    Oder meinen Gedanken?
    Denke man lernt sehr viel aus Erfahrungen und nicht nur aus einem Buch oder den neusten Standards.
    Danke
    Gruß Markus

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Westerwälder“ ()

    @Westerwälder Wie schätzt Du Deine Programmierkenntnisse ein?
    Wieviele (ernsthafte) Projekte hast Du bisher bis zum Abschluss (mit) bearbeitet?
    Bist Du in der Lage, ein Pflichtenheft zu schreiben?
    Bist Du in der Lage, anhand eines Pflichtenheftes ein Projekt zu bearbeiten?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Wie wollen wir das definieren?
    Was macht Sinn, was macht Unsinn?
    Bin damals nach meiner Banklehre in die Firma meines Vater gewechselt.
    Da gab es nichts außer Papier und Bleistift.
    Erst die Buchhaltung und Personalverwaltung.
    Aus einem Lieferschein wurde eine Rechnung.
    Auftragsverwaltung war komplett.
    Angebotserstellung kam anschließend.
    bin dann 2002 aus gesundheitlichen Gründen ausgeschieden.
    ich weis aber das die heute noch damit arbeiten.

    Zur Zeit verwalte ich mit meinem Programm die Immobilien meiner Mutter,
    dass geht soweit das Nebenkosten-Rechnungen an die Mieter erstellt
    und auch eine Steuererklärung ans FA geht.
    Termine und Zahlungen werden überwacht.
    Habe das von meinem Steuerberater prüfen lassen, er meint besser geht's nicht

    Gruß Markus

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Westerwälder“ ()

    @Westerwälder Dann sind wir doch genau da, wo Du sein solltest aber nicht bist.
    Du hast irgend was programmiert und Du glaubst, dass es richtig ist. Nun funktioniert es nicht so wie gedacht und Du fällst aus allen Wolken.
    Dies ist das Hauptproblem aller Young-Star-Programmierer: Mein Programm macht genau das, was ich glaube, das es tun soll.
    Tut es aber nicht.
    Warum?
    • Euer Plan ist sehr dynamisch bis nicht existent.
      ==> Ihr macht den fünften Schritt vor dem Zweiten,
      ==> ihr arbeitet an einem Moving Target.
    • Ihr testet nicht.
      ==> Jede Zeile Code, die nicht getestet ist, ist falsch (Zitat von einem Freund).
    • Ihr habt keine Vorstellung, was am Ende rauskommen soll.
      Ich mach nur mal fix ein kleines Programm für einen Freund / Vater / Kollegen.
    Was ist zu tun?
    • Macht einen sehr detaillierten Plan (Pflichtenheft, Design-Doku, Testspezifikation).
      Wenn dieses Dokument fertig ist, wandern neue Wünsche, egal von wem (!) in die Wunschliste für die nächste Version.
      Was soll mein Programm können?
    • Was soll passieren, wenn ich in diesem Dialog auf jenen Button drücke?
      Wie sind die Dialoge aufgebaut (Controls, Databinding, ...),
      wie werden sie aufgerufen (modal, nicht modal)?
    • Wie wird das ganze getestet?
      Testprojekt, Unittest,
      Testdaten.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Rod, ich akzeptiere doch deine Meinung.
    Aber es war doch so, dass ich nicht nur programmieren kann.
    Ich musste ja auch noch Geld verdienen.

    Ich habe kein Abitur. Nur Handelsschule und danach die Banklehre.
    Aber die Programme haben ihren Sinn erfüllt und helfen heute noch

    Ich habe das schon oft mit EDR gehabt,
    den ich auch sehr schätze.

    Angenommen das wird mehr, und man weis irgendwann das kann keine Einzelperson mehr alleine sondern da müssen zwei oder mehr dran, was nu?
    Designer sucht weiter auf C:\.....
    Obwohl wir nun die Daten auf einem Server oder NAS haben?
    ist das eine Lösung
    Sowas muss eine .ini machen
    oder?

    Nein noch falsch ausgedrückt.
    In den neunziger kam irgendwann ein Feld Email hinzu.
    Nun hat der Designer ein Problem.

    Klar könnte man eine neue Tabelle in der DB erstellen.

    n:n id auf email
    das gleiche zur fax-nummer irgendwann
    dann auf Facebook
    ist das im Sinne der Person, welcher den Überblick über den Aufbau einer Datenbank behalten sollte?
    Das sind doch irgendwann verlorene (oder einsame) Datensätze.

    Gruß Markus

    Dieser Beitrag wurde bereits 7 mal editiert, zuletzt von „Westerwälder“ ()

    Westerwälder schrieb:

    oder?
    Diese und jene Daten müssen persistent abgelegt werden.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Westerwälder schrieb:

    geht nicht
    Settings?
    Zu Fuß oder DataBinding.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    wenn du mal zeit und lust hast

    dies ist das datenmodell
    Spoiler anzeigen


    VB.NET-Quellcode

    1. Public Class CManagment
    2. ''' <summary>
    3. ''' True: Klasse ist initalisiert
    4. ''' False: Klasse ist nicht initalisiert
    5. ''' </summary>
    6. Public IstInitalisiert As Boolean = False
    7. ''' <summary>
    8. ''' True: Klasse wurde initalisiert
    9. ''' False: Klasse wurde nicht initalisiert
    10. ''' </summary>
    11. Public WurdeInitalisiert As Boolean = False
    12. ''' <summary>
    13. ''' Name der Datatabelle
    14. ''' </summary>
    15. Public TabellenName As String
    16. ''' <summary>
    17. ''' Freie Variable zur Formulierung komplexer Abfragen
    18. ''' </summary>
    19. Public AbfrageText As String
    20. ''' <summary>
    21. ''' Bindingsource von Datatabelle
    22. ''' </summary>
    23. Public DataQuelle As New BindingSource
    24. ''' <summary>
    25. ''' Aktuelle ausgewählte Zeile der Datatabelle
    26. ''' </summary>
    27. Public DataZeile As DataRow
    28. ''' <summary>
    29. ''' Freie Zeile zur Verfügung
    30. ''' </summary>
    31. Public FreieZeile As DataRow
    32. ''' <summary>
    33. ''' Zeile bei Install-Abfragen
    34. ''' </summary>
    35. Public WertZeile As DataRow
    36. ''' <summary>
    37. ''' Freie Zeile für Prüfungen/Abfragen
    38. ''' </summary>
    39. Public PruefZeile As DataRow
    40. ''' <summary>
    41. ''' Freie Zeile der Datatable (Für Neuanlage)
    42. ''' </summary>
    43. Public NeueZeile As DataRow
    44. ''' <summary>
    45. ''' Freie Zeile zum Drucken
    46. ''' </summary>
    47. Public DruckZeile As DataRow
    48. ''' <summary>
    49. ''' Gibt an, ob nummeriert wird
    50. ''' Standard: False
    51. ''' </summary>
    52. Public Wird_Nummeriert As Boolean
    53. ''' <summary>
    54. ''' Freie Suchzeilen
    55. ''' </summary>
    56. Public SuchZeile() As DataRow
    57. ''' <summary>
    58. ''' Rückmeldung Neuanlagen: Nummernkreis freie Nummer möglich
    59. ''' </summary>
    60. Public NeuanlageMoeglich As Boolean
    61. ''' <summary>
    62. ''' Startnummer aus den NummernPool
    63. ''' </summary>
    64. Public Nummer_Von As Integer
    65. ''' <summary>
    66. ''' Endnummer aus dem NummernPool
    67. ''' </summary>
    68. Public Nummer_Bis As Integer
    69. ''' <summary>
    70. ''' Bezeichnung des Nummernfeld: z.Bsp. Nummer oder Kontonummer
    71. ''' </summary>
    72. Public Nummer_Feld As String
    73. ''' <summary>
    74. ''' True: Fehlende Nummer aus dem NummernPool werden vergeben
    75. ''' False: Es wird die nächste Nummer vergeben
    76. ''' </summary>
    77. Public Nummer_Automatic As Boolean
    78. ''' <summary>
    79. ''' Verbindung zwischen Datenbank und Datentabelle
    80. ''' </summary>
    81. Protected DataAdapter As OleDb.OleDbDataAdapter
    82. ''' <summary>
    83. ''' Datenbefehle Insert, Delete, Update
    84. ''' </summary>
    85. Private DataBuilder As OleDb.OleDbCommandBuilder
    86. ''' <summary>
    87. ''' Datentabelle: Spiegel der Tabelle der Datenbank
    88. ''' </summary>
    89. Public DataTabelle As DataTable
    90. ''' <summary>
    91. ''' Bezeichnung des Primärschüssel (z.Bsp. ID)
    92. ''' </summary>
    93. Public PrimKeyName As String
    94. ''' <summary>
    95. ''' True: DataQuelle gefüllt aus DataTabelle
    96. ''' False: DataQuelle nicht gefüllt
    97. ''' </summary>
    98. Public MitBinding As Boolean
    99. ''' <summary>
    100. ''' OleDbConnection - Datenverbindung
    101. ''' </summary>
    102. Public Datenverbindung As New OleDbConnection
    103. ''' <summary>
    104. ''' Beispiel: "Select * From Pfade Order by Nummer"
    105. ''' </summary>
    106. Public VerbindungsAuftrag As String
    107. Public Sub Schliessen()
    108. Me.Datenverbindung.Close()
    109. End Sub
    110. Public Sub Initalisieren()
    111. Try
    112. Me.IstInitalisiert = False
    113. If Me.PrimKeyName = Nothing Then Me.PrimKeyName = "ID"
    114. If Me.Nummer_Feld = Nothing Then Me.Nummer_Feld = "Nummer"
    115. If Me.Datenverbindung Is Nothing Then Me.Datenverbindung = New OleDbConnection(Daten.Verbindungsstring_MBSOFT)
    116. DataAdapter = New OleDb.OleDbDataAdapter(Me.VerbindungsAuftrag, Me.Datenverbindung)
    117. DataBuilder = New OleDb.OleDbCommandBuilder(DataAdapter)
    118. DataBuilder.QuotePrefix = "["
    119. DataBuilder.QuoteSuffix = "]"
    120. DataAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey
    121. DataTabelle = New DataTable
    122. DataAdapter.FillSchema(DataTabelle, SchemaType.Mapped)
    123. DataAdapter.Fill(DataTabelle)
    124. DataTabelle.PrimaryKey = New DataColumn() {DataTabelle.Columns(Me.PrimKeyName)}
    125. TabellenName = DataTabelle.TableName
    126. If Me.MitBinding Then DataQuelle.DataSource = DataTabelle
    127. DataZeile = DataTabelle.NewRow
    128. IstInitalisiert = True
    129. WurdeInitalisiert = True
    130. If Not DataTabelle.Rows.Count < 1 Then WertZeile = DataTabelle.Rows(0)
    131. Catch ex As Exception
    132. MessageBox.Show("Fehler beim Initalisiren einer Datentabelle" & vbNewLine &
    133. "Verbindungsauftrag: " & Me.VerbindungsAuftrag & vbNewLine &
    134. ex.Message, "MBSOFT - Datenmanagment" & Programm.Copyright_Messagebox,
    135. MessageBoxButtons.OK, MessageBoxIcon.Error)
    136. End
    137. End Try
    138. MeinInstall()
    139. End Sub
    140. ''' <summary>
    141. ''' Objektspzifische Installierung von Daten und Eigenschaften
    142. ''' </summary>
    143. Protected Overridable Sub MeinInstall()
    144. End Sub
    145. ''' <summary>
    146. ''' DataQuelle wird von Datatable gefüllt.
    147. ''' </summary>
    148. Public Sub Binding_Initalisieren()
    149. Me.DataQuelle.DataSource = Me.DataTabelle
    150. End Sub
    151. ''' <summary>
    152. ''' Databindings (DataQuelle) werden entladen (Speicheroptimierung).
    153. ''' </summary>
    154. Public Sub Binding_Deinstallieren()
    155. Me.DataQuelle.EndEdit()
    156. Me.DataQuelle.Filter = Nothing
    157. Me.DataQuelle = New BindingSource
    158. End Sub
    159. ''' <summary>
    160. ''' Speichert die Datentabelle in der Datenbank
    161. ''' </summary>
    162. Public Sub Speichern()
    163. Try
    164. Me.DataQuelle.EndEdit()
    165. Me.DataAdapter.Update(Me.DataTabelle)
    166. Catch ex As Exception
    167. Dim JaNein As DialogResult = MessageBox.Show("Bei dem Versuch in die Datenbank zu schreiben ist ein Fehler aufgetreten." & vbNewLine &
    168. ex.Message & vbNewLine &
    169. "Möchten Sie nun das Programm beenden? " & vbNewLine,
    170. "Datenbankfehler - " & Programm.Copyright_Messagebox,
    171. MessageBoxButtons.YesNo, MessageBoxIcon.Error)
    172. If JaNein = DialogResult.Yes Then Programm.Beenden()
    173. End Try
    174. End Sub
    175. ''' <summary>
    176. ''' Datentabelle erneut aus Datenbank lesen
    177. ''' </summary>
    178. ''' <param name="MitBindingQuelle"></param>
    179. Public Sub Neuladen(ByVal MitBindingQuelle As Boolean)
    180. DataTabelle = New DataTable
    181. DataAdapter.FillSchema(DataTabelle, SchemaType.Mapped)
    182. DataAdapter.Fill(DataTabelle)
    183. If Not Me.PrimKeyName = Nothing Then DataTabelle.PrimaryKey = New DataColumn() {DataTabelle.Columns(Me.PrimKeyName)}
    184. TabellenName = DataTabelle.TableName
    185. If MitBindingQuelle Then Me.DataQuelle.DataSource = Me.DataTabelle
    186. IstInitalisiert = True
    187. End Sub
    188. ''' <summary>
    189. ''' DataTabelle und DataQuelle werden zerstört
    190. ''' </summary>
    191. Public Sub Entladen()
    192. DataTabelle = New DataTable
    193. DataQuelle = New BindingSource
    194. IstInitalisiert = False
    195. MeinEntladen()
    196. End Sub
    197. ''' <summary>
    198. ''' Entladen von objektspezifischen Elementen
    199. ''' </summary>
    200. Protected Overridable Sub MeinEntladen()
    201. End Sub
    202. ''' <summary>
    203. ''' Gibt wieder, ob Datentabelle Datensätze beinhaltet
    204. ''' </summary>
    205. ''' <returns></returns>
    206. Property HatDaten As Boolean
    207. Get
    208. If AnzahlDatensaetze > -1 Then
    209. Return True
    210. Else
    211. Return False
    212. End If
    213. End Get
    214. Private Set(value As Boolean)
    215. End Set
    216. End Property
    217. ''' <summary>
    218. ''' Liefert die Anzahl der Datensäte in der Datentabelle
    219. ''' </summary>
    220. ''' <returns></returns>
    221. Property AnzahlDatensaetze As Integer
    222. Get
    223. Return DataTabelle.Rows.Count
    224. End Get
    225. Private Set(value As Integer)
    226. End Set
    227. End Property
    228. ''' <summary>
    229. ''' Liefert die neue neue Nummer lt. Datenpool der Anwendung
    230. ''' </summary>
    231. ''' <returns></returns>
    232. Property NummerNeu As Integer
    233. Get
    234. Me.NeuanlageMoeglich = False
    235. Dim NP As Integer = Daten.NeueNummer_Ermittlung(Me.DataTabelle, Me.Nummer_Von, Me.Nummer_Bis, Me.Nummer_Automatic, Me.Nummer_Feld)
    236. If NP = -1 Then
    237. MessageBox.Show("Eine Neuanlage ist nicht möglich, da keine Nummer" & vbNewLine &
    238. "aus dem Nummernkreis mehr zur Verfügung steht.",
    239. "Datenbankmanagment" & Programm.Copyright_Messagebox,
    240. MessageBoxButtons.OK, MessageBoxIcon.Error)
    241. Me.NeuanlageMoeglich = False
    242. Return -1
    243. Exit Property
    244. End If
    245. Me.NeuanlageMoeglich = True
    246. Return NP
    247. End Get
    248. Private Set(value As Integer)
    249. End Set
    250. End Property
    251. Private I As Integer
    252. Private Zeile As String
    253. ''' <summary>
    254. ''' Liefert den 1. gefundenen Wert in der Datentabelle
    255. ''' Bsp. Gesucht wird der Name des Datensatzes mit der Nummer 102
    256. ''' Suchfeld = Nummer
    257. ''' Suchwert = 102
    258. ''' Rückgabefeld = Name
    259. ''' Lieferformat: String
    260. ''' </summary>
    261. ''' <param name="Suchfeld"></param>
    262. ''' <param name="Suchwert"></param>
    263. ''' <param name="Rueckgabefeld"></param>
    264. ''' <param name="Tabelle"></param>
    265. ''' <returns></returns>
    266. Public Function Find_Wert(ByVal Suchfeld As String, ByVal Suchwert As String, Rueckgabefeld As String, Optional Tabelle As DataTable = Nothing) As String
    267. If Tabelle Is Nothing Then Tabelle = Me.DataTabelle
    268. Dim GefundeneZeilen() As DataRow
    269. Dim Abfrage As String = Suchfeld & " = '" & Suchwert & "'"
    270. Try
    271. GefundeneZeilen = Tabelle.Select(Abfrage)
    272. If Not GefundeneZeilen(0) Is Nothing Then
    273. Return (GefundeneZeilen(0)(Rueckgabefeld)).ToString
    274. Else
    275. Return Nothing
    276. End If
    277. Catch ex As Exception
    278. Return Nothing
    279. End Try
    280. End Function
    281. ''' <summary>
    282. ''' Liefert Tabellenindex einer Datenzeile
    283. ''' Datenzeilenbeispiel: Me.Datazeile
    284. ''' Lieferformat: Integer
    285. ''' </summary>
    286. ''' <param name="Datenzeile"></param>
    287. ''' <param name="Tabelle"></param>
    288. ''' <returns></returns>
    289. Public Function Find_TabellenIndex(ByVal Datenzeile As DataRow, Optional Tabelle As DataTable = Nothing) As Integer
    290. If Tabelle Is Nothing Then Tabelle = Me.DataTabelle
    291. Dim MeineZeile As DataRow
    292. Dim comparer As IEqualityComparer(Of DataRow) = DataRowComparer.Default
    293. ' Die Zeilen werden miteinander verglichen
    294. For Me.I = 0 To Tabelle.Rows.Count - 1
    295. MeineZeile = Tabelle.Rows(Me.I)
    296. Dim bEqual = comparer.Equals(MeineZeile, Datenzeile)
    297. If bEqual = True Then
    298. Return Me.I
    299. Exit Function
    300. End If
    301. Next
    302. Return -1
    303. End Function
    304. ''' <summary>
    305. ''' Liefert Datenzeile aus Datentabelle
    306. ''' Abfragebeispiel: Nummer = 123, oder Optional Angabe des TabellenIndex
    307. ''' Lieferformat: DataRow
    308. ''' </summary>
    309. ''' <param name="Abfrage"></param>
    310. ''' <param name="Tabelle"></param>
    311. ''' <param name="Index"></param>
    312. ''' <returns></returns>
    313. Public Function Find_Zeile_Abfrage(ByVal Abfrage As String, Optional Tabelle As DataTable = Nothing, Optional ByVal Index As Integer = -1) As DataRow
    314. If Tabelle Is Nothing Then Tabelle = Me.DataTabelle
    315. Dim ReturnZeile As DataRow = Tabelle.NewRow
    316. Dim SuchZeile() As DataRow = Nothing
    317. If Tabelle.Rows.Count = -1 Then
    318. Return Nothing
    319. Exit Function
    320. End If
    321. If Not Index = -1 Then
    322. ReturnZeile = Tabelle.Rows.Find(Index)
    323. Return ReturnZeile
    324. Exit Function
    325. End If
    326. SuchZeile = Tabelle.Select(Abfrage)
    327. If SuchZeile.Count < 1 Then Return Nothing : Exit Function
    328. If SuchZeile(0) Is Nothing Then
    329. Return Nothing
    330. Exit Function
    331. Else
    332. ReturnZeile = SuchZeile(0)
    333. End If
    334. Return ReturnZeile
    335. End Function
    336. ''' <summary>
    337. ''' Liefert Datenzeile über Angabe Nummer
    338. ''' Nummerbeispiel: 102
    339. ''' Lieferformat: DataRow
    340. ''' </summary>
    341. ''' <param name="Nummer"></param>
    342. ''' <param name="Tabelle"></param>
    343. ''' <returns></returns>
    344. Public Function Find_Zeile_Nummer(ByVal Nummer As Integer, Optional Tabelle As DataTable = Nothing) As DataRow
    345. If Tabelle Is Nothing Then Tabelle = Me.DataTabelle
    346. Dim GefundeneZeilen() As DataRow
    347. Dim Abfrage As String = "Nummer = '" & Nummer.ToString & "'"
    348. Try
    349. GefundeneZeilen = Tabelle.Select(Abfrage)
    350. If Not GefundeneZeilen(0) Is Nothing Then
    351. Return GefundeneZeilen(0)
    352. Else
    353. Return Nothing
    354. End If
    355. Catch ex As Exception
    356. Return Nothing
    357. End Try
    358. End Function
    359. Public Function Find_Zeile_ID(ByVal ID As Integer, Optional Tabelle As DataTable = Nothing) As DataRow
    360. If Tabelle Is Nothing Then Tabelle = Me.DataTabelle
    361. Dim GefundeneZeilen() As DataRow
    362. Dim Abfrage As String = "ID = " & ID
    363. Try
    364. GefundeneZeilen = Tabelle.Select(Abfrage)
    365. If Not GefundeneZeilen(0) Is Nothing Then
    366. Return GefundeneZeilen(0)
    367. Else
    368. Return Nothing
    369. End If
    370. Catch ex As Exception
    371. Return Nothing
    372. End Try
    373. End Function
    374. Public Function Sind_Zeilen_Gleich(ByVal Zeile1 As DataRow, ByVal Zeile2 As DataRow) As Boolean
    375. Dim comparer As IEqualityComparer(Of DataRow) = DataRowComparer.Default
    376. Dim bEqual = comparer.Equals(Zeile1, Zeile2)
    377. Return bEqual
    378. End Function
    379. End Class
    380. End Class


    und so ein zugriff auf die daten

    VB.NET-Quellcode

    1. Anwender = New MBC_MBSOFT.CAnwender
    2. With Anwender
    3. .Datenverbindung = New OleDb.OleDbConnection(Daten.Verbindungsstring_MBSOFT)
    4. .VerbindungsAuftrag = "Select * From Anwender"
    5. .MitBinding = True
    6. .PrimKeyName = "ID"
    7. .Wird_Nummeriert = True
    8. .Nummer_Feld = "Nummer"
    9. .Nummer_Von = 100
    10. .Nummer_Bis = 120
    11. .Nummer_Automatic = True
    12. .Initalisieren()
    13. End With







    und ich finde, dass ist das tolle, man kann fast alles, aber muss nichts
    und Datenfehler sind bisher (nun zwei Jahre) nicht vorgekommen.
    Gruß Markus

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Westerwälder“ ()

    habe die Unterhaltung nochmal Revue passieren lassen
    Programme die teilweise 30 Jahre fehlerfrei laufen muss ich mir keine Gedanken mehr drum machen.
    Schreibe oder frage ja hier nach wenn ich Programme entwickele in VB net und nicht wenn sie irgendwo ihren Dienst tun.
    Habe noch nie was raus gegeben, was nie zumindest ein Jahr im Test war
    Es gibt zu allem einen PAP und ein Handbuch.

    Weis, ich mag vielleicht ein Querkopf im Leben sein.
    Mein Sohn fragt mich warum ich mir mit 51 einen 535i xdrive kaufe?
    Antwort: Weil ich ihn mit 62 nicht mehr wirklich nutzen könnte (ausfahren)
    Versteht er nicht
    Gruß Markus

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Westerwälder“ ()

    Ist wie immer,
    Thema bleibt da stehen ohne Lösung.
    Wie mein letztes, warum wird aus accdb .MdB
    bekomme dann was erzählt und Vorhaltungen gemacht, wie verstehst du das überhaupt
    Denke melde mich nun ab hier und sehe zu wie ich alleine klar komme.
    Gruß Markus