Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Anzeigen einer Tabelle in einem C++ Builder 4.0 Programm

Empfohlene Antworten

Veröffentlicht

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

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

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

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

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!

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

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.

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

<STRONG>

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

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

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!

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

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

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.