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.

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

TableA -> Query -> TableB

2ter Dataflow

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 :)

BO DI Found erroneous expression <>

16. Februar 2010

Toller Fehler im Business Objects DataIntegrator bzw DataServices

Fehler: “Found erroneous expression <>. Please check its syntax and fix this expression.”

Lösung bei mir: Ich hatte eine Varibale Definiert aber keinem Parameter zugewiesen.

MS SQL gespeicherte Prozedur Array while loop schleife

8. 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

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

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

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.

Windows 7 Business Objects Webi AD Login/Anmeldung

24. November 2009

Ich habe ja meinen PC jetzt auf Windows 7 umgestellt. Und eigentlich geht auch alles wunderbar kann mich eigentlich nicht beklagen.
Nur die Business Objects Programm wollten sich nicht so ganz fügen.

Man konnte sich zwar noch anmelden aber nicht mehr über die AD-Authentifizierung :(

Dann kam immer im WEBI immer die Meldung: Es wird kein Central Management Server ausgeführt

Was mir natürlich nichts gebracht hat.

Aber das konnte ich ja nicht auf mir sitzen lassen und habe mal eine wenig gesucht konnte aber im Internet so nichts über das Thema finden.
Also habe ich einfach mal einen anderen Weg eingeschlagen.

Da ich schon mal was davon gelesen habe das Microsoft bei Windows 7 die Kerberos Verschlüsslung geändert hat habe ich ein wenig in die Richtung gesucht.
Und bin auch fündig geworden.

Es sieht so aus das Windows 7 nur noch die neuen Verschlüsslungen benutzt also AES oder RC4 aber nicht mehr das alte DES.

Das Problem ist das Business Objects Webi nur die DES Verschlüsslung benutzt und es deswegen zu einer Abweisung des Login kommt.

Aber hier die Lösung:

Diesen Beitrag weiterlesen »

Windows 7 Event 11327

19. November 2009

Ich habe seit heute Windows 7 im Einsatz und wollte mal ein wenig Software installieren.

Und hatte meine Dokumente auf eine Netzlaufwerk umgemappt was bei so machen Installationen eine Fehlermeldung auslöste.

Z.B.
Produkt: Adobe Reader 9.1 – Deutsch — Fehler 1327. Ungültiges Laufwerk: H:\

1
2
3
4
5
6
7
8
9
10
System 
  - Provider
   [ Name]  MsiInstaller 
  - EventID 11327 
   [ Qualifiers]  0 
   Level 2 
   Task 0 
   Keywords 0x80000000000000 
   EventRecordID 2641 
   Channel Application

Und schon habe ich mich nach meinem WinXP gesehnt ;)

Aber ich habe ja einen klugen Admin (Denis) bei mir in der nähe und der hat das Problem lösen können :)

Lösung:

Es liegt daran das die Installationen im Admin-Modus aufgerufen werden und das Laufwerk H:\ für den Admin nicht gemappt ist.

1
2
3
Also ruft man eine CMD im Admin-Modus auf und mappt das Laufwerk 
 
Net Use H: Pfad

und schupps geht’s. :)

Somit kann ich doch noch ein wenig bei Win7 bleiben XD

UPDATE
UPDATE

1
2
3
4
5
Wenn man einfach einen UNC-Pfad einträgt,
anstatt eines Netzlaufwerk klapp das noch viel besser.
 
Und wer ist drauf gekommen?? 
Natürlich der Denis :)

Excel VBA Auslesen eines kompletten Recordsets (CopyFromRecordset)

11. November 2009

was es nicht alles für schöne Funktionen in Excel gibt und ich kannte sie nicht :(

Ich habe immer mühsam meine Recordset mit einer Schleife ausgelesen was natürlich immer ewig gedauert hat.
Kommt natürlich auf die Menge der Datensätze an.

Aber es gib in Excel die Funktion CopyFromRecordset die ein Recordset mit einmal in Excel schreibt.

1
2
3
4
5
For iCols = 0 To .Fields.Count - 1
  Cells(1, iCols + 1).Value = .Fields(iCols).Name
Next
Range(Cells(1, 1), Cells(1, .Fields.Count)).Font.Bold = True
Range("A2").CopyFromRecordset rst

Und dann dauert es nur noch ein paar Sekunden und schupps sind die Daten da :)