Zum Inhalt springen

Anzeigen einer Tabelle in einem C++ Builder 4.0 Programm


argony

Empfohlene Beiträge

Hi Leute,

ich habe folgendes Problem... Ich hab eine Textdatei, in der die Daten durch ";" voneinander getrennt sind... in Excel lässt sich dass dann auch wunderbar in Form einer Tabelle öffnen...

in meinem Builder Programm weiß ich nicht wie ich das anstellen soll... :confused:

Hat jemand einen Tipp oder nen Link zu einem brauchbaren :P Tutorial über dieses Thema...

Danke im Voraus

mfg

Argony

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wie willst Du die Daten denn Anzeigen lassen?

Ich habe das gleiche auch schon einmal gemacht, dabei habe ich dann die einzelnen Informationen in jeweils ein Edit-Feld geschrieben. Ist es das was Dir vorschwebt?

Den Code dazu könnte ich Dir mailen oder nachher Posten (hab ihn gerade nicht griffbereit).

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi Jestertales,

den code würde ich dankend annehmen... allerdings dachte ich weniger an Editfelder sondern eher an die DBGrid Funktion im C++ Builer. Ich hab mich damit beschäftigt bin allerdings nicht sehr weit gekommen, da ich nicht rausfinden konnte wie ich die einzelnen Felder ansprechen kann... :(

mein quellcode ist auch ziemlich durcheinander... übung macht den meister... (di müsste man erst mal haben :D )

also wie gesagt der code würde mich sehr interessieren... wenn es geht bitte das ganze projekt.

mfg

Argony

Link zu diesem Kommentar
Auf anderen Seiten teilen

So, hier ist der Teil meines Programmes, der die Daten mit dem Semikolon eingelesen hat:


//---------------------------------------------------------------------------


#include <vcl.h>

#include <stdio.h>

#include <dos.h>

#include <fstream.h>

#pragma hdrstop


#include "Beispiel.h"


//---------------------------------------------------------------------------


#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;


FILE *speicher;


AnsiString Dateiname;


//---------------------------------------------------------------------------


void __fastcall TForm1::ffnen1Click(TObject *Sender)

{

ifstream goin;			// Stream zum Auslesen der Datei

char zeichen;

char eintrag[251]={0};		// Array, da Zeichen für Zeichen gelesen wird

int i = 0, y = 1;		// Variablen um Festzustellen welches Edit feld das

				// aktuelle ist


  if (OpenDialog1 -> Execute())

    {

    goin.open(OpenDialog1->FileName.c_str());

    Dateiname = OpenDialog1->FileName;


    while (!goin.eof())		// Bis zum Ende des Files lesen

      {

      goin.get(zeichen);	// Einlesen des Zeichens

      if (zeichen != 59 && i < sizeof(eintrag))		// Prüfen ob das Zeichen ein 

							// Semikolon ist

        {

        eintrag[i] = zeichen;	// Wenn nicht: Aktuelles Zeichen dem Array hinzufügen

        i++;

        }

      else			// Semikolon: Array in Edit-Feld ausgeben und

        {			// nächstes Edit Feld "ansteuern"

        switch (y)

          {

          case 1:

            EdtTest1 ->Text = eintrag;

            break;

          case 2:

            EdtTest2 ->Text = eintrag;

            break;

          case 3:

            EdtTest3 ->Text = eintrag;

            break;

          case 4:

            EdtTest4 ->Text = eintrag;

            break;

          }

        y++;

        i=0;

        memset(eintrag,0,sizeof(eintrag)); // Array wieder löschen

        }

      }

    }

  }

  goin.close();   // Schließen des Streams

So, ideal ist die Lösung nicht, aber etwas besseres ist mir nicht eingefallen ;-)

Hoffe ich konnte trotzdem helfen.

Bye

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo, wenn ihr bis morgen warten könnt, kann ich vielleicht eine Antwort geben, weil ich hier ein Buch über den Borland Builder habe, der relativ eingehend die DBE beschreibt. Ich arbeite zwar mit Studio (gebe also keine Garantien ob´s nachher tatsächlich im Builder compiliert wird), aber mal sehn ob ich helfen kann

Also ich habe bisher auch die Excel-Exports immer in Arrays eingelesen - ist wohl auch mit das einleuchtendste und einfachste.

.... CU tomorrow!

Link zu diesem Kommentar
Auf anderen Seiten teilen

<BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Zitat:</font><HR>Original erstellt von Jestertales:

<STRONG>

So, ideal ist die Lösung nicht, aber etwas besseres ist mir nicht eingefallen ;-)

Hoffe ich konnte trotzdem helfen.

</STRONG>

Link zu diesem Kommentar
Auf anderen Seiten teilen

das geht auch einfacher:

  • Zeile einlesen
  • Zeile zeichenweise durchgehen und alle ';' durch ein '\0' ersetzen, Anzahl der Ersetzungen merken
  • Jetzt kannst du durch die Zeile "hüpfen", indem du immer erst den ersten String rausholst, und danach strlen(ersterString)+1(wg Nullzeichen) weiterhüpfst

wenn du willst kann ich dir code dazu schicken. ist aber wirklich eine elegantere lösung finde ich.

Link zu diesem Kommentar
Auf anderen Seiten teilen

cntWord zählt die Anzahl der durch '@' getrennten Elemente.

Der Klammeraffe ist bei dir natürlich ein Semikolon:

  

	for (i = 0; i < LineLength; i++) {

	    if (Zeile[i] == '@') {

		Zeile[i] = '\0'; 

		cntWord ++;

	    }	

	}; // for jedes eingelesene Zeichen ende 

So, und dann kopierst du die einzelnen Elemente einfach in die Strings oder sonstwohin, wo du sie eben haben willst.
  

        for (k = 0; k < LineLength; k++) {


	    if (Zeile[k] == '\0') {

		element++;

	        strcpy(ablage1,"");

		// Ci

		if (element == 13) {

		    strcpy(ablage1, Zeile + k + 1);

		    strcat(neueZeile,ablage1);

		}

		// Systemtechnik

		if (element == 14) {	    

		    strcpy(ablage1, Zeile + k + 1);

		    strcpy(SystemTechnik,ablage1);

		}

		// Kanal[0-7]&maio[0-7]&fhid[0-7]

		if ( (element > 308) && (element < 325)) {

		    strcpy(ablage1, Zeile + k + 1);

		    strcat(neueZeile,"@");

		    if (strcmp(ablage1,"") != 0) {

		      strcat(neueZeile,ablage1);

		    }

		}

	    }

	}; // for jedes Wort ende



Da ich weder eine Entwicklungsumgebung hab, noch C++ kann oder jemals was mit Oberflächen gemacht hab, kann ich dir bei deinem Tabellenproblem leider nicht weiterhelfen ...

Link zu diesem Kommentar
Auf anderen Seiten teilen

OK, hier die DBGrid-Lösung:

1)

Beim erstellen der Anwendung DATENZUGRIFF aus der Komponentenpalette auswählen und ein "Table", sowie ein Typ "Datasource" auf das Formular ablegen.

2)

DATENSTEUERUNG -> Typ "DBGrid" ins Formular legen

3)

Eigenschaft ALIGN für DBGRID1 auf alBottom (zwecks Ausrichtung)

4)

Table-Komponente auswählen und die Eigenschaften "DATABASENAME" mit dem Verzeichnis der Datenbank belegen & "TABLENAME" auf den Namen der Tabelle setzen

5)

Mit dem Felder-Editor (Doppelklick auf TABLE- oder QUERY-Komponente) CUSTOMER.DB auswählen.

6)

DATASOURCE1 (Schnittstelle zwischen TABLE- & DBGRID-Komponente) auf dem Hauptformular auswählen und beim Objektinspektor die Eigenschaften der DATASOURCE-Komponente/DATASET aussuchen und im Listenfenster der Tabelle TABLE1 selektieren.

7)

Bei DATASOURCE DATASOURCE1-Komponente auswählen

8)

Auf die TABLE-Komponente im Hauptformular klicken und dort die Eigenschaft ACTIVE (steht false drin) doppelklicken und die Daten aus Customer.db werden im DBGRID abgebildet.

Werden nun Buttons ins Formular gesetzt zeigt der This-Pointer auf die Table1-Komponente und kann zum Beispiel über Table1->Open() geöffnet werden oder über Table1->Active = !(Table1->Active) an- und ausgeschaltet werden und über den Objektinspektor/FILTER bei Opendialog kann man die Datenbank-Endungen definieren, die zur Verfügung stehen sollen. Öffnen mit:

Table1->TableName=OpenDialog1->FileName;

Table1->Open();

Eigentlich ganz einfach. Über den -> Operator kann nun jede Table-Funktion bequem aufgerufen werden. Vermutlich erklären sich die meisten Ausdrücke von selbst.

Hoffentlich hat Dir das geholfen!

Link zu diesem Kommentar
Auf anderen Seiten teilen

hi leutz,

ich konnte leider den ganzen tag nichts abrufen, da bei mir der blitz eingeschlagen hat... ist aber wieder in ordnung.

@poldi: vielen herzlichen dank... hat mir sehr geholfen...

@crush1: du bist mein engel :D ... das war genau das was ich gesucht habe... ich glaub jetzt werd ich ein forum junky.

@all: nochmals vielen dank an alle ich hab so viel gelernt dass ich jetzt erst mal wieder ne weile lesen und verdauen muss...

mfg Argony

Link zu diesem Kommentar
Auf anderen Seiten teilen

<BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Zitat:</font><HR>Original erstellt von Crush1:

<STRONG>

5)

Mit dem Felder-Editor (Doppelklick auf TABLE- oder QUERY-Komponente) CUSTOMER.DB auswählen.

Hoffentlich hat Dir das geholfen!</STRONG>

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...