Archiv für die Kategorie ‘Allgemein’

Vb.net wpf listview add

Mittwoch, 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

(weiterlesen…)

VB.Net Sqlite Dataset zeigt keine dezimalstellen bzw Kommastellen an

Dienstag, 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 :(

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

Montag, 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)

Business Objects Table Comparison mit Bedingung

Mittwoch, 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

MS SQL gespeicherte Prozedur Array while loop schleife

Montag, 08. Februar 2010

Ich hatte das vergnügen ein wenig mit den „gespeicherten Prozeduren“ vom MS Sql-Server zu spielen ;)

Hier mal ein Beispiel Scenario:
Aufgabe war es aus einem Text mit Simicolon getrennten Werten, jeden einzelt in eine Tabelle zu schreiben.

Also als eingangs Parameter haben wir die Variable @temp_ID

@temp_ID hat den Wert: 1423,5895,4578,2248

Gelöst habe ich das so:

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
USE [master]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
 
CREATE PROCEDURE [dbo].[sp_test_insert]
	-- Add the parameters for the stored procedure here
	@temp_ID varchar(8000)
AS
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;
 
    	-- Insert statements for procedure here   
 
	DECLARE @ID varchar(10), @Pos int
 
	SET @temp_ID = LTRIM(RTRIM(@temp_ID))+ ','
	SET @Pos = CHARINDEX(',', @ temp_ID, 1)
 
	IF REPLACE(@temp_ID, ',', '') <> ''
	BEGIN
	    WHILE @Pos > 0
	    BEGIN
                SET @ID = LTRIM(RTRIM(LEFT(@temp_ID, @Pos - 1)))
 
		IF @ID <> ''
		BEGIN
		    INSERT INTO Table1 ([ID]) VALUES (@ID)
 
		END -- IF @ID <> ''
 
		SET @ temp_ID = RIGHT(@temp_ID, LEN(@temp_ID) - @Pos)
		SET @Pos = CHARINDEX(',', @ temp_ID, 1)
 
	    END -- WHILE @Pos > 0
 
	END	-- IF REPLACE(@temp_ID, ',', '') <> ''
 
END

Office Word 2007 und die Einfg Taste

Donnerstag, 21. Januar 2010

Da hat Microsoft mal wieder ein bisschen geändert.

Die Einfg-Taste funktioniert in Word 2007 Standardmäßig nicht mehr.
Man muss sie erst in den Optionen von Word wieder einstellen.

  1. Also man geht in Word 2007 oben links auf das Office-Zeichen.
  2. Als nächstes geht man auf Word-Optionen.
  3. Hier wählt man jetzt „Erweitert“
  4. Und unter dem Bereich „Bearbeitungsoptionen“ (ganz oben) findet man
    dann den Punkt „EINFG-Taste zum Steuern des Überschreibmodus verwenden“
    und „Überschreibmodus verwenden“
  5. Diese beiden Punkte anhaken.
  6. Und jetzt geht auch das Überschreiben wieder. 

Das Problem jetzt ist nur noch das man nicht sieht ob man die Überschreib-Funktion aktiviert hat.
Jetzt kann man sich das aber in der Statusleiste noch einblenden lassen.

  1. Rechtsklick auf die Statusleiste
  2. Auf den Punkt „Überscheiben“ klicken
  3. Jetzt wird unten eingeblendet ob man Überschreiben oder Einfügen an hat.

BO mal eine kleine Formel

Mittwoch, 20. Januar 2010
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
ifthenelse(cast(word(PARA_TXT, 2),'varchar(16)')<>'D', ifthenelse(index(cast(word(PARA_TXT, 2),'varchar(16)'),'0',0) is NULL, 
ifthenelse(index(cast(word(PARA_TXT, 2),'varchar(16)'),'EUR',0) is NULL, 
ltrim_blanks(replace_substr(replace_substr(cast(word(PARA_TXT, 2),'varchar(16)'), 'FT', ''), 'TF', ''))||' ', ''), ''), '')||
ifthenelse(cast(word(PARA_TXT, 3),'varchar(16)')<>'D', ifthenelse(index(cast(word(PARA_TXT, 3),'varchar(16)'),'0',0) is NULL, 
ifthenelse(index(cast(word(PARA_TXT, 3),'varchar(16)'),'EUR',0) is NULL, 
ltrim_blanks(replace_substr(replace_substr(cast(word(PARA_TXT, 3),'varchar(16)'), 'FT', ''), 'TF', ''))||' ', ''), ''), '')||
ifthenelse(cast(word(PARA_TXT, 4),'varchar(16)')<>'D', ifthenelse(index(cast(word(PARA_TXT, 4),'varchar(16)'),'0',0) is NULL, 
ifthenelse(index(cast(word(PARA_TXT, 4),'varchar(16)'),'EUR',0) is NULL, 
ltrim_blanks(replace_substr(replace_substr(cast(word(PARA_TXT, 4),'varchar(16)'), 'FT', ''), 'TF', ''))||' ', ''), ''), '')||
ifthenelse(cast(word(PARA_TXT, 5),'varchar(16)')<>'D', ifthenelse(index(cast(word(PARA_TXT, 5),'varchar(16)'),'0',0) is NULL, 
ifthenelse(index(cast(word(PARA_TXT, 5),'varchar(16)'),'EUR',0) is NULL, 
ltrim_blanks(replace_substr(replace_substr(cast(word(PARA_TXT, 5),'varchar(16)'), 'FT', ''), 'TF', ''))||' ', ''), ''), '')||
ifthenelse(cast(word(PARA_TXT, 6),'varchar(16)')<>'D', ifthenelse(index(cast(word(PARA_TXT, 6),'varchar(16)'),'0',0) is NULL, 
ifthenelse(index(cast(word(PARA_TXT, 6),'varchar(16)'),'EUR',0) is NULL, 
ltrim_blanks(replace_substr(replace_substr(cast(word(PARA_TXT, 6),'varchar(16)'), 'FT', ''), 'TF', ''))||' ', ''), ''), '')||
ifthenelse(cast(word(PARA_TXT, 7),'varchar(16)')<>'D', ifthenelse(index(cast(word(PARA_TXT, 7),'varchar(16)'),'0',0) is NULL, 
ifthenelse(index(cast(word(PARA_TXT, 7),'varchar(16)'),'EUR',0) is NULL, 
ltrim_blanks(replace_substr(replace_substr(cast(word(PARA_TXT, 7),'varchar(16)'), 'FT', ''), 'TF', ''))||' ', ''), ''), '')

So macht es doch spaß Daten aus anderen System zu holen.
Wenn die die Daten schon schön falsch abspeichern *Argh*

Excel 2007 Masken funktion

Donnerstag, 14. Januar 2010

Bei Excel 2003 gab es unter Daten den Punkt Masken den findet man bei Excel 2007 nicht so.

Man muss sie erst Manuel zur Leiste hinzufügen
Excel-Optionen | Anpassen | Alle Befehle | Maske | hinzufügen

oder man ruft sie mit der Tastenkombination

Alt + N + M

auf.

Excel Suchen/Ersetzen von *

Mittwoch, 30. September 2009

Man kann einen * ersetzen in dem man eine Tilde davor macht.

Also:

~*

Und schon gehts ;) War doch wohl logisch oder etwa nicht ^^

Welche Berechtigungen braucht man für WMI?

Donnerstag, 27. August 2009

Diese Frage hat mich viel Zeit gekostet bis ich sie endlich raus gefunden habe. Man möchte nicht gleich einen lokalen admin anlegen nur damit man Daten per WMI abfragen kann. Zumindest wollte ich das nicht und habe versucht herauszufinden welche Berechtigungen man braucht.
War aber leider gar nicht so einfach ich habe schon oft deswegen im Internet gesucht aber immer nichts gefunden. Und selbst den Benutzer für WMI in jede Klasse setzten und gucke ob es dann geht war mir auch zu anstrengend, weil es ja auch sein könnte das ich noch mehr einstellen muss oder die anderen Einstellungen nicht stimmen.

Doch heute habe ich mal wieder nach diesem Thema gesucht und endlich die Berechtigungen gefunden irgendwo tief in Foren war es versteckt ;)

Dann jetzt zu den Einstellungen:

    Gruppe in die der User eingetragen werden muss:
    Distributed COM Users

    oder

    Administrators
    Rechte auf den WMI-Bereich müssen auch gesetzt werden:
    (Unter Verwalten -> Dienste und Anwendungen -> WMI-Steuerung -> Rechts klick auf WMI-Steuerung -> Eigenschaften -> Reiter (Sicherheit) -> Bereich (Standard: CIMV2) anklicken -> dann Sicherheit anklicken (unten rechts) -> Benutzer hinzufügen)
    Folgende Berechtigungen müssen gesetzt werden:

    Konto aktivieren

    Remoteaktivierung