Laden...

Forenbeiträge von Tarrida Ingesamt 11 Beiträge

17.09.2008 - 11:07 Uhr

Hallo Community,

mein Problem ist folgendes:

Ich habe ein Crystal Reports Dokument, auf dem ich eine Statistik anzeigen lasse.

  1. Ich verwende hierzu ein Balkendiagramm.
  2. Die Gruppen (in meinem Fall die Firmen) sind auf der Y - Achse angeordnet.
  3. Die Werte (in meinem Fall die Beträge) sind auf der X - Achse angeordnet.

Bsp:

--------------------------------------------------
Firma A |-----------                             |
Firma B |----                                    |
Firma C |-----------------                       |
--------------------------------------------------
Betrag  |  10     20     30

Nun habe ich das Problem dass die Firmennamen teilweise sehr lang sind, und ich für das GroupLabel (Firma A, Firma B usw.) gerne eine mindestlänge festlegen möchte die noch angezeigt wird.

Leider finde ich dafür keine möglichkeit. Ich kann bisher nur Font etc. eine andere Eigenschaft zuweisen.

Kennt hierfür jemand eine Lösung?

Ich bedanke mich schon mal im voraus für eventuelle Antworten 🙂

13.03.2008 - 08:05 Uhr

Moin, moin!

Das stimmt, habe ich gemerkt und funktioniert!
Wusste ehrlich gesagt nicht, dass das im nachhinein geht.
Nu is auch die Performance 1 A.

Vielen Dank nochmal.
Das Programm wäre extrem unproduktiv gewesen wenn ich 4-6 Sekunden nach jeder Eingabe hätte warten müssen.

12.03.2008 - 16:35 Uhr

Ja... was soll ich sagen...
Kein Index.

Bleibt mir warscheinlich nur die Datenbankwerte in eine neu angelegte Datebank umzumodeln um die performance zu steigern wie ich das sehe...

Auf jeden Fall vielen Dank an alle für die schnelle Hilfe. Jetzt weiß ich was ich tun muss 🙂

12.03.2008 - 16:21 Uhr

Die Datenbank ansich ist sehr einfach gestrickt. Primärschluessel + weitere 6 Columns.
Die Abfrage ist auch kein Kunststück.


SELECT * FROM myTable WHERE Belegnummer = 'gesuchtNummer'

Das Problem ist nur, je weiter "unten" die gesuchte Nummer ist, desto länger dauert es. Eigentlich einleuchtend, nur habe ich bereits Programme gesehen die das ganze in ca. 1-2 Sekunden abfragen (Bei gleicher Datensatzanzahl). Den SourceCode dazu habe ich leider nicht gesehen.

Wie gesagt, mein Programm braucht dazu ca. 5-6 Sekunden wenn der Datensatz recht weit "unten" ist.

EDIT:
@Jelly:
Habe das oben ein bischen falsch beschrieben. Also, der Benutzer gibt vom Beleg eine Belegnummer ein, und dann soll geprüft werden ob dieser Beleg in der Datenbank existiert.

@Bernd:
Ich probier sofort mal ob das mit einem "SELECT Count(*)" schneller geht, als sich den kompletten Datensatz mit "SELECT * ...." zurückgeben zu lassen. Vielen Dank!

[EDIT2]
Ob auf der Spalte ein Index liegt prüfe ich sofort. Habe die Datenbank von jemandem übernommen. Ich kann nur hoffen dass dies der Fall ist. Geprüft habe ich das noch nicht. Vielen Dank für den Anstoß.

12.03.2008 - 16:04 Uhr

verwendetes Datenbanksystem: <SQL-Server 2000 auf Windows 2003 Server mit Quadprozessor>

Hallo,

habe folgendes Problem:
Ich schreibe derzeit ein Erfassungsprogramm, dass gewisse Belegdaten mit einer Datenbank abgleicht.
Meine Datenbank hatte derzeit ca. 995 000 Datensätze.
Um herauszufinden ob eine Belegnummer bereits in der Datenbank ist, baue ich mir einen CommandText mit der Select-Abfrage zusammen, und verwende die Funktion:

myDatenbankAdapter.SelectCommand.ExecuteScalar()

aus dem namespace "System.Data.SqlClient"
um herauszufinden ob der Datensatz bereits in der Datenbank vorhanden ist.

Problem dabei ist allerdings, dass die Abfrage teilweise bis zu 5 Sekunden dauert.
Mein Frage ist nun wie ich am besten Zeit gut machen kann bei der Abfrage.

Ist es hier besser beim Start des Programms die komplette Datenbank in ein DataSet zu laden, oder eventuell eine Klasse zu verwenden?

Bin dankbar für jede Hilfe.

Tarrida

21.12.2007 - 10:14 Uhr

Hallo herbivor,

Vielen Dank für deine schnelle Antwort. Wenn ich das richtig deute, gefällt dir die Lösung dass ich einfach den DataRow.ItemArray für mein Vorhaben Benutze nicht so richtig. Ich gebe zu, dass ich diesen aus Faulheit verwende 🙂

Da mein Konstrukt aber nun so ja leider so nicht funktioniert, finde ich die Idee einer eigenen Klasse sehr gut, und werde diese wohl auch umsetzten.

Vielen Dank

Tarrida

21.12.2007 - 09:54 Uhr

Hallo Leute,

ich habe ein Problem bei der Konvertierung eines ObjectArray in einen StringArray.
Genauer gesagt, ist ein Datentyp des ObjectArrays ein DateTime Datentyp.

Bisher hab ich folgenden Code:


myStringArray = Array.ConvertAll<object, string> (myDatarow.ItemArray, delegate (object myObject) {return (string) myObject;});


Das ganze funktioniert ja eigentlich wunderbar, nur habe ich jetzt in einer Spalte meiner DataRow einen DateTime Datentyp, und ich bekomme einen InvalidCastException wo es heißt:

Das Objekt des Typs System.DateTime kann nicht in Typ System.String umgewandelt werden.

Allerdings ist es doch prinzipiell möglich einen DateTime Datentyp in einen String zu konvertieren, z.B. DateTime.Now.ToString() funktioniert ja.

Meine Frage ist nun, ob ich eine Möglichkeit habe durch umschreiben meiner Konvertierung den DateTime Datentyp in einen String zu bekommen, oder ob ich nun die Daten meiner Datarow schon vorher aufbereiten muss.

Vielen Dank schon jetzt, für euere Antworten.

23.11.2007 - 10:11 Uhr

www.connectionstrings.com

Da wirste auf jeden Fall fündig 😉

MySQL Set your custom
connection string values »

This is a compiled connection strings reference list on how to connect to MySQL.

[EDIT]

MyODBC

MyODBC 2.50 Local database

Driver={mySQL};Server=localhost;Option=16834;Database=myDataBase;

COPY TO CLIPBOARD
MyODBC 2.50 Remote database

Driver={mySQL};Server=myServerAddress;Port=3306;Option=131072;Stmt=; Database=myDataBase;Uid=myUsername;Pwd=myPassword;

COPY TO CLIPBOARD
MyODBC 3.51 Local database

Driver={MySQL ODBC 3.51 Driver};Server=localhost;Database=myDataBase; User=myUsername;Password=myPassword;Option=3;

COPY TO CLIPBOARD
MyODBC 3.51 Remote database

Driver={MySQL ODBC 3.51 Driver};Server=data.domain.com;Port=3306;Database=myDataBase;User=myUsername; Password=myPassword;Option=3;

UVM...
[/EDIT]

22.11.2007 - 15:42 Uhr

So, habe mal wieder Zeit meinen Monolog zu erweitern.
Habe nun mal nach dem Grundsätzlichen Aufbau eines Tiff-Headers geschaut.
Dieser setzt sich wie folgt zusammen.

Byte 0-1: Definiert die Reihenfolge in denen die Bytes gelesen werden. Format II (hex 4949) bedeutet dass vom niedrigsten zum höchsten Byte hin gelesen wird. Format MM (hex 4D4D) definiert, dass man die Bytes quasi rückwärts liest.

Byte 2-3: Tiff-Versionsnummer. Diese ist immer gleich (hex002A). Immer wenn dieser Hexwert an der stelle steht, handelt es sich um ein Tiff.

Byte 4-6: Ist der Offset des ersten IFD

Bisher lese ich mein Tiff Byteweise ein, und speicher es in einen Byte[].

Da jede Seite einen eigenen IFD besitzt, der sich irgendwo in der Datei befinden kann, ist der Grundgedanke (laut Adobe), dass man sich nun den ersten IFD anguckt, und durch eine Berechnung an den Offset des 2ten IFD kommt. Diese Spiel soll solange durchgeführt werden bis ein IFD den Wert "00000000" annimmt (Dies deutet auf die letzt Seite hin).
Wenn ich nun die IFD's zähle müsste ich somit an die Seitenanzahl des Multitiffs kommen.

Gegeben:

Byte 4-6 definiert den Wert A; A definiert den Index des Byte B; A + 2 definiert das 2te Byte nach dem Byte B mit dem Index A

Nun gibt es von Adobe folgende Formel:

A + 2 + B * 12

Ich habe bisher das Spiel im Hexadezimalsystem, im Dualsystem und im Dezimalsystem durchgerechnet, und habe noch keinen einzigen Erfolg verzeichnen können, obwohl es so von Adobe ofiziell beschrieben wird.

Wenn diese Methode bereits jemand erfolgreich genutzt hat, wäre es super wenn er mir meinen Fehler dabei erklären könnte 😜
Weitere Posts folgen nun erst wieder bei Erfolg 😉

20.11.2007 - 16:17 Uhr

Bisher habe ich das Problem mit PixTools.Net "gelöst"...
In Anführungszeichen gelöst deshalb, da ich nun für jede Installation meines Programms PermissionFiles erzeugen müsste, welche natürlich kostenpflichtig sind.

Für Leute die PixTools.Net ebenfalls verwenden:


foreach (FileInfo fi in FiInfo)
                {
                    listView1.Items.Add(fi.ToString());
                    //PixTools Multitiff auslesen
                    
                    PixImage Image;
                    int p = 0;
                    while (p >= 0)
                    {
                        string File = "Y:\\Images\\" + e.Node.Parent.Text + "\\" + e.Node.Text.ToString() + "\\" + fi.ToString();
                        Image = new PixImage();
                        try
                        {
                            PixImageStorage.Load(Image, File, p);
                            p++;
                        }
                        catch (PixException ex)
                        {
                            Gesamtseitenanzahl = Gesamtseitenanzahl + p;
                            p = -1;
                        }
                        catch (Exception ex)
                        {
                            lblSeitenanzahl.Text = ex.Message;
                            return;
                        }
                    } 

                    
                }
                lblSeitenanzahl.Text  = Gesamtseitenanzahl.ToString();

Für die unsaubere Lösung mit den Catches zur Berechnung bitte ich euch mich nicht zur Verantwortung zu ziehen.
Dies ist, und das ist KEIN WITZ ein offizieller Lösungsvorschlag der PixToolsentwickler ... hust

Wie gesagt, mein Problem ist damit leider aber nicht gelöst, da ich für 7 Firmenarbeitsplätze nicht jedes Mal eine Lizenz ausstellen kann, und will.

Also wenn jemand zum Thema "Auslesen von Multitiff-Headern" konkrete Lösungsvorschläge hat, wäre ich immernoch sehr dankbar.

mfg
Tarrida

19.11.2007 - 15:25 Uhr

Hallo Gemeinde,

Ich würde gerne über C# ein Multitiff einlesen um anschließen die Seitenanzahl festzustellen. (Dies ist Teil eines Projekts). Dies müsste über den Tiff-Header möglich sein. In den Extension TIFF tags soll unter Code 297(Dec) bzw 0129 (Hex) die PageNumber verzeichnet sein.
Nun zu meinem Problem:

Ich lese bisher eine Multitiff-Datei ein:

 
Image myImage = Image.FromFile ("myMultitiff");

Dann versuche ich über die Metadaten an die PageNumber zu kommen:


myImage.PropertyItems 

Habe das kompletten PropertyItems[] debuged, aber finde keine ItemID 297.
ID296(Dec) The unit of measurement for XResolution and YResolution. (Habe ich mal frech kopiert) ist z.B. im Array vorhanden.

Nun liegt die Vermutung nahe, dass mir der PropertyItmes[] keine Extension TIFF tags anzeigt. Allerdings fällt mir atm keine andere Lösung ein, um an die Seitenanzahl zu kommen.

Eventuell kann mir ja von euch jemand helfen.
Vielen Dank im voraus

Tarrida