Vb.net wpf listview add

21. Juli 2010

Es war mal so schön einfach Daten in einer Listeview anzuzeigen, aber man muss ja immer alles ändert damit den Programmieren auch nicht langweilig wird ;)
Ich wollte mal ein wenig mit WPF arbeiten, weil man damit schöne durchsichtige Controls in seiner Oberfläche erstellen kann. Ohne viel Aufwand zu betreiben.

Die Listview auf die Oberfläche ziehen und ein paar Spalten einfügen habe ich auch noch hinbekommen, war aber auch nicht so einfach wie mit WinForms. Aber was sollst ;)
Ist ja für die Transparenz

Doch als ich ein paar Test-Daten in meine Listview eingelesen habe wurde mir in allen drei Spalten der gleich Wert Angezeigt :( , obwohl ich genau das gleiche gemacht habe wie bei WinFroms Listview.

Hier mal der Quellcode und das Ergebnis:

1
2
3
Dim MyLVItem As New ListViewItem
MyLVItem.Content = "Spalte1"
lstData.Items.Add(MyLVItem)

Hier mal mein XML:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<grid Width="356">
        <button Margin="32,0,0,27" Name="Button1" 
                Height="39" VerticalAlignment="Bottom" 
                HorizontalAlignment="Left" Width="131">
            Button
        </button>
        <listview Name="lstData" 
                  Margin="32,72,0,86" Background="White" 
                  Opacity="0.8" HorizontalAlignment="Left" Width="254">
            </listview><listview .View>
                <gridview>
                    <gridviewcolumn Width="Auto">Name1_ColumnHead</gridviewcolumn>
                    <gridviewcolumn Width="Auto">Name2_ColumnHead</gridviewcolumn>
                </gridview>
            </listview>
 
    </grid>

Lösung

Lies den Rest des Artikels »

VB.Net Sqlite Dataset zeigt keine dezimalstellen bzw Kommastellen an

06. Juli 2010

Ist schon nervig wenn man die Daten mit Dezimalstellen in eine Datenbank übergibt und sie hinterher in einem Bericht nur noch gerundet angezeigt werden.

Ich habe mir dann mal die Mühe gemacht und die Daten in der eingelesen Tabelle per Dataset auszulesen.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Dim ConnStrSL As String = "Data Source = " & _
Application.StartupPath & "\Datenbank\test.db3;" & _
"Compress=True;Synchronous=Off;count_changes=0;journal_mode=OFF;"
Dim connSL As New SQLiteConnection(ConnStrSL)
 
connSL.Open()
 
Dim da As New SQLiteDataAdapter("select *  from [tbl_test]", connSL)
Dim ds As New System.Data.DataSet
 
da.Fill(ds)
 
With ds.Tables(0)
	Console.Write(vbCrLf)
	For i = 0 To .Columns.Count - 1
		Console.Write(.Columns.Item(i).Caption & vbTab)
	Next
 
	For i = 0 To .Rows.Count - 1
		Console.Write(vbCrLf)
		For c = 0 To .Columns.Count - 1
			Console.Write(.Rows(i).Item(c) & vbTab)
		Next
	Next
End With
 
connSL.Close()

Die Ausgabe sah dann so aus:

1
2
3
4
5
6
[Regal Nr]	Anzahl
236		1
236		1
236		1
236		15
236		15

Da dachte ich die Daten werden vielleicht falsch importiert aber das habe ich schnell verworfen und habe mir die Daten einfach mal per DataReader ausgegeben

1
2
3
4
5
6
7
8
9
10
connSL.Open()
cmdSL.CommandText = "select *  from [tbl_test]"
Dim MYDataReader As SQLite.SQLiteDataReader = cmdSL.ExecuteReader
 
Do While MYDataReader.Read
	Debug.Print(MYDataReader.Item(0).ToString & vbTab & _
	MYDataReader.Item(1).ToString)
Loop
 
connSL.Close()

Die Ausgabe sah dann so aus:

1
2
3
4
5
6
[Regal Nr]	Anzahl
236		1,6
236		1,5	
236		1,2
236		15,2
236		15,2

Dann war ich ganz verwirrt wieso wird per Dataset alles ohne Dezimalstellen ausgegeben und per DataReader dann mit O__o

Doch schließlich habe ich den Fehler doch gefunden ;)
Beim erstellen der Tabelle tbl_test habe ich schon einen Fehler gemacht den aber SqLite einfach mal so über geht und auch alles damit macht aber bei der Ausgabe per Dataset zickt.
Hier mein erstellen der Tabelle:

1
CREATE TABLE [tbl_test] ([Regal Nr] varchar(255), Anzahl Single)

und Fehler gesehen?

1
CREATE TABLE [tbl_test] ([Regal Nr] varchar(255), Anzahl DOUBLE)

Ja ist nicht so einfach den Unterschied zu sehen ;)
Ich habe die Anzahl jetzt einfach als DOUBLE deklariert, weil SqLite SINGLE so eigentlich nicht kennt.
Muss mir aber auch mal jemand sagen. gemein gemein :(

vb.net cF winCE sqlce Datenbank Erstellen und Daten einfügen

25. März 2010

Da wir für den SqlCeServer eine SDF-Datenbank brauchen musste ein Skript her um aus einer vohandenen MDB-Datenbank eine SDF-Datenbank zu erstellen.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
Imports System.Data.OleDb
Imports System.Data.SqlServerCe
 
'#######################################
        'Hier den Pfad angeben in dem die Datenbank erstellt werden soll
        Dim ConnStr As String = "Data Source = .\wince_artikel_inventur.sdf" & _
                                         ";File Mode=Shared Read;Persist Security Info=False"
 
        Dim conn As New SqlCeConnection(ConnStr)
        Dim cmd2 As New SqlCeCommand()
        Dim SQLCEDB As New SqlCeEngine(ConnStr)
        Dim i as Integer
 
        'Prüfen ob die Datenbank in dem angegebenen Pfad nicht schon gibt
        If Not System.IO.File.Exists(".\wince_artikel_inventur.sdf") Then
 
            SQLCEDB.CreateDatabase()
            cmd2.Connection = conn
            conn.Open()
 
            'Anlegen einer Tabelle in der Datenbank
            cmd2.CommandText = "CREATE TABLE [tbl_artikel](" & _
                 "[ean] [nvarchar](255), " & _
                 "[artikel] [nvarchar](255), " & _
                 "[bez] [nvarchar](255), " & _
                 "[preis] [nvarchar](255), " & _
                 "[ean2] [nvarchar](255))"
 
            cmd2.ExecuteNonQuery()
 
            '##############
            'Importieren der Daten der Tabelle "tbl_artikel"
 
            For Each row As DataRow In ds.Tables(0).Rows
                cmd2.CommandText = "INSERT INTO tbl_artikel (ean,artikel,bez,preis,ean2) " & _
                                    "VALUES " & _
                                    "('" & _
                                    row(0) & "','" & _
                                    row(1) & "','" & _
                                    Replace(row(2), "'", "") & "'," & _
                                    row(3) & ",'" & _
                                    row(4) & "'" & _
                                    ")"
                cmd2.ExecuteNonQuery()
 
                i += 1
                Debug.Print(i)
                Application.DoEvents()
            Next
 
            conn.Close()
 
        End If
'#######################################

vb.net cF wav abspielen

25. März 2010

In meinem letzten Artikel habe ich ja gezeigt wie man in WinCE und .net CF ein Beep ausgibt
Wem das aber nicht reicht der kann auch “WAV” Dateien abspielen

Ist auch recht simpel man muss nur auch hier wieder mal wissen wie es geht ;)

Habe auch schon wenig lange Skripte im Internet gefunden aber wieso muss man immer alles so schwer machen.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
sub make_some_noise
 
    Dim player As SoundPlayer
    player = New SoundPlayer
 
    Try
 
        Dim dlg As New OpenFileDialog
        dlg.Filter = "WAV files (*.wav)|*.wav"
        dlg.FilterIndex = 0
 
        If dlg.ShowDialog() = System.Windows.Forms.DialogResult.OK Then
            player.SoundLocation = dlg.FileName
        End If
 
        player.Play()
 
    Catch ex As Exception
        msgbox("FehlerP: " & ex.Message)
    End Try
 
End Sub

vb.net cF winCE beep

25. März 2010

wie macht mein beep in Windows CE und .net CF
Eigentlich ganz einfach ;)

1
Interaction.Beep()

doch was ist wenn man ein unterschiedliches Geräusch für Fehler und Informationen haben will.
Aber da habe ich auch nach ein wenig suchen was gefunden.
Auch ganz einfach man muss nur wissen wie es funktioniert ;)

1
2
3
Imports System.Media
 
SystemSounds.Asterisk.Play()

Und schon wird ein “schöner” Ton für einen Fehler erzeugt.

Es gibt noch ein paar mehr Töne…

1
2
3
4
SystemSounds.Exclamation.Play()
SystemSounds.Beep.Play()
SystemSounds.Hand.Play()
SystemSounds.Question.Play()

vb.net compact Framework winCE sqlceexpection

23. März 2010

ich bin gerade ein bisschen am basteln mit WinCE und einer sdf-datenbank.
Und jetzt habe ich ein paar Daten in die Datenbank eingelesen und bekomme beim Select mit where eine SqlCeException.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Source:
"SQL Server Compact ADO.NET Data Provider"
 
StackTrace:
 at System.Data.SqlServerCe.SqlCeDataReader.ProcessResults(Int32 hr)
   at System.Data.SqlServerCe.SqlCeDataReader.IsEndOfRowset(Int32 hr)
   at System.Data.SqlServerCe.SqlCeDataReader.Move(DIRECTION direction)
   at System.Data.SqlServerCe.SqlCeDataReader.Read()
   at System.Data.ProviderBase.DataReaderContainer.Read()
   at System.Data.Common.DataAdapter.FillLoadDataRow(SchemaMapping mapping)
   at System.Data.Common.DataAdapter.FillFromReader(DataSet dataset, DataTable datatable, String srcTable, DataReaderContainer dataReader, Int32 startRecord, Int32 maxRecords, DataColumn parentChapterColumn, Object parentChapterValue)
   at System.Data.Common.DataAdapter.Fill(DataTable[] dataTables, IDataReader dataReader, Int32 startRecord, Int32 maxRecords)
   at System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
   at System.Data.Common.DbDataAdapter.Fill(DataTable[] dataTables, Int32 startRecord, Int32 maxRecords, IDbCommand command, CommandBehavior behavior)
   at System.Data.Common.DbDataAdapter.Fill(DataTable dataTable)

Habe aber die Lösung relative schnell finden können.

Ich habe im Select in einem nvarchar feld gesucht und habe die ‘ zeichen um den wert vergessen

z.b.
Select artikel from tbl_artikel where artikel = ’123456′;

BO Konvertierung char in datetime außerhalb des gültigen Bereichs

15. März 2010

und schon wieder eine schöne Fehlermeldung:

1
2
3
4
5
Bei der Konvertierung eines char-Datentyps in einen datetime-Datentyp 
liegt der datetime-Wert außerhalb des gültigen Bereichs
 
The conversion of a char data type to a datetime data type 
resulted in an out-of-range datetime value.>.

In der Datenbank waren in dem Feld Datum-Wert mit denen SQL-2005 nicht umgehen konnte wie z.b. 19.05.956

Lösung:

ifthenelse( is_valid_date(DATE, ‘DD/MM/YYYY’) = 1, to_date(DATE, ‘DD/MM/YYYY’), NULL)

BO DI Fault address: 7D4E2366 kernel32.dll

15. März 2010

ahh der Business Objects DataIntergrator Designer wollte mich heute echt ärger :(

Da erstelle ich ein paar neue ODBC Verbindungen zu einem ADS Server und füge in einen DataFlow noch ein paar neue Source Tabellen aus den ODBC’s ein und Merge die dann in die Staging Tabelle und auf einmal bekomme ich eine Kryptische Fehlermeldung mit der ich einfach mal nichts anfangen kann O__o

1
2
3
Fehlermeldung (letzten beiden Zeilen):
Exception code: C06D007F
Fault address: 7D4E2366 01:00012366 C:\WINDOWS\syswow64\kernel32.dll

Habe erst mal gedacht ich habe vielleicht keine Berechtigungen auf den Ordner in dem die Datenbank liegen aber da stimmte alles.

Also habe ich nach und nach alle Source Tabellen wieder gelöscht und als ich alle Tabellen die auf die neuen ODBC Verbindungen verwiesen gelöscht hatte ging es auf einmal wieder.

Natürlich habe ich dann die ODBC Verbindungen im ODBC-Manager verglichen aber es war alles gleich :(

Aus einem unerfindlichen Grund dachte ich mir einfach ich schau mir die mal im RegistryEditor an.

Und siehe da die neu angelegten ODBC Verbindungen wurden mit der Version 9.1 des ADS-Treibers angelegt und der scheint bei mir irgendwie Fehler zu verursachen

Lösung:
Den Treiberpfad aus den alten DSN in die neuen kopieren und schon funktioniert das auch ;)

Business Objects Table Comparison mit Bedingung

24. Februar 2010

was für ein tolles Problem.
Ich habe versucht mit einem Table Comparison nur bestimmte Datensätze zu löschen.
Das heißt ich wollte in der Vergleichs Tabelle (TableB) eine Bedingung angeben.

Das Problem war ich lade aus einer Tabelle (TableA) Daten von gestern und füge Sie der Haupttabelle (TableB) zu. Durch ein Table Comparison vergleiche ich die beiden Tabellen um zu gelöschte Datensätze zu finden und zu löschen. Nur wenn er nur die Daten von gestern mit allen anderen vergleich dann löscht er den Rest.

1
TableA -> Query -> Table Comparison -> TableB

Lösung:

Also ich habe aus dem 1ten Dataflow den Table Comparison entfernt und einen 2ten Dataflow in den Workflow gebaut.

1ter Dataflow

1
TableA -> Query -> TableB

2ter Dataflow

1
2
3
4
TableA
    -> Query -> Validation       -> Map Operation     -> TableB
                (if NULL Pass)     (Normal to Delete)
TableB

In dem 2ten Dataflow habe ich in dem Query ein Outer Join von TableB zu TableA gemacht. Damit ich alle Datensätze aus TableB bekomme.
In der Validation frage ich ein Feld das aus TableA kommt ab ob es gleich NULL ist.
Wenn ja dann soll es an die Map Operation übergeben werden.
Die Map Operation wandelt alle Normal Eingänge in ein Delete um und schon werden alle gelöschten Datensätze gelöscht.

Google Tags:

Business Objects Table Comparison Detect deleted row(s) with condition
Business Objects Table Comparison gelöschte Datensätze mit bedingung

vb.net 32bit ODBC auf 64Bit System

18. Februar 2010

ich hatte gerade das Vergnügen mich mit einer kuriosen Fehlermeldung auseinander zu setzten.

Wollte von einem 64Bit Server auf den ODBC-Treiber vom Sybase Advantage Database Server 9 zugreifen.

1
2
3
4
Hier mal die Fehlermeldung:
Microsoft ODBC Driver Manager : 
Der angegebene DSN weist eine nicht 
übereinstimmende Architektur von Treiber und Anwendung auf.

Ich habe das Programm auf einem 32Bit Windows am Laufen und alles funktioniert.
Nur so bald das Programm auf einem 64Bit Windows/Sever laufen soll kommt diese Meldung.
Ich habe auch geschaut ob der Treiber installiert ist.

Lösung:

Der ODBC-Treiber ist ein 32Bit Treiber und das Programm lief als 64Bit Anwendung schön an dem Fehlenden *32 im Taskmanager zu sehen.

Da Visual Studio 2008 die Anwendungen Standard mäßig für beide System also 32bit und 64bit kompiliert meint Windows der Treiber für die Verbindung fehlt.

Also muss man in Visual Studio 2008 einfach die Ziel-CPU ändern auf x86.

(Eigenschaften Vom Projekt -> Kompilieren -> Erweiterte Kompilierungsoptionen -> Ziel-CPU)

Und schon geht alles :)