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 »
Tags: add, einfach, Insert, Listview, simple, VB.Net, WPF
Veröffentlicht in Allgemein, VB.Net | Keine Kommentare »
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 :(
Tags: Create Table, datareader, dataset, db3, decimal, dezimal, dezimalstellen, Fehler, Kommastellen, Sqlite, VB.Net
Veröffentlicht in Allgemein, VB.Net | Keine Kommentare »
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
'####################################### |
Tags: compactFramework, Create Table, Daten einfügen, Datenbank erstellen, Insert, PocketPC, Smart Device, SqlCeServer, WinCE, Windows Mobile
Veröffentlicht in VB.Net, Windows CE | Keine Kommentare »
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 |
Tags: compactFramework, play, PocketPC, Smart Device, SoundPlayer, WAV, WinCE, Windows Mobile
Veröffentlicht in VB.Net, Windows CE | Keine Kommentare »
25. März 2010
wie macht mein beep in Windows CE und .net CF
Eigentlich ganz einfach ;)
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() |
Tags: .net CF, beep, compactFramework, PocketPC, Smart Device, SystemSounds, Windows Mobile
Veröffentlicht in VB.Net, Windows CE | Keine Kommentare »
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′;
Tags: compactFramework, PocketPC, Smart Device, SqlCeException, SqlServerCe, WinCE, Windows Mobile
Veröffentlicht in SQL Server, VB.Net, Windows CE | Keine Kommentare »
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)
Tags: BO, Business Objects, char, datetime
Veröffentlicht in Allgemein | Keine Kommentare »
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 ;)
Tags: Business Objects, DataIntegrator, DataServices, Fault address, kernel32.dll
Veröffentlicht in BusinessObjects, ODBC | Keine Kommentare »
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
Tags: BO, Business Objects, Detect deleted row(s), Map Operation, Table Comparison, Validation
Veröffentlicht in Allgemein, BusinessObjects | 2 Kommentare »
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 :)
Tags: 32Bit, 64Bit, ODBC, ODBC-Treiber, Sybase Advantage Database Server, VB.Net
Veröffentlicht in ODBC, VB.Net | 2 Kommentare »