Table of Contents

Tabellen und Spalteninfos aus Datenbank

Informationen

  • Kategorien: Kernel | Klassenformeln
  • Version: 17.0.0.5129
  • Veröffentlichungsdatum: Freitag, 12. Juli 2013
  • Entwickler: Götzen
  • Benötigt Datenbankänderung: Ja
  • Betreff: Funktionen zum Auslesen von Tabellen und Spalteninformationen einer Datenbank.

Beschreibung

Funktionen zum Auslesen von Tabellen und Spalteninformationen einer Datenbank:

DB_GetTableNames(), DB_LoadColumnMetadataCache(), DB_GetColumnNames(), DB_HasTable(), DB_HasTableColum(), DB_GetColumnSize(), DB_GetColumnPrecision(), DB_GetColumnType(), DB_IsColumnNullable(), DB_ReleaseColumnMetadataCache()

Verwendung siehe Beispielcode.

Beispielcode


function void GetDatabaseMetadata( string $sDataBase, byref string $sDataToWrite  )
{
	var string $TableNames[];
	var string $ColumnNames[];
	var string $sError;
	var string $TableName;
	var string $ColumnName;

	var int $Index;
	var int $nCount;
	var int $iFlags;

	var int $IndexColumns;
	var int $nCountColumns;
	var int $ColumnType;
	var int $ColumnSize;
	var int $ColumnNullable;
	var int $ColumnPrecision;
	
	$ColumnType = 0;
	$ColumnSize = 0;
	$ColumnNullable = 0;
	$ColumnPrecision = 0;

	$sError = "";
	$iFlags = 0; // Cached

	// Tabellennamen auslesen
	if( !DB_GetTableNames( $sDataBase, $iFlags, $TableNames, $sError ))
	{
		MessageBox( "Error: GetTableNames " + $sError );
		return;
	}

	// Columnmetadaten auslesen und cachen
	//
	DB_LoadColumnMetadataCache( $sDataBase, $TableNames, $sError );

	$nCount = GetSize( $TableNames );
	for ( $Index = 0; $Index < $nCount; $Index++ )
	{
		$TableName = $TableNames[ $Index ];

		if( DB_HasTable( $sDataBase, $iFlags, $TableName, $sError ) && StrLength( $sError ) == 0 )
		{
			$sDataToWrite = $sDataToWrite + "\nTabelle: " + $TableName + "\n  Columns:\n";

			// Spaltennamen auslesen
			//
			if( !DB_GetColumnNames( $sDataBase, $iFlags, $TableName, $ColumnNames,  $sError ))
			{
				MessageBox( "Error: GetColumnNames " + $sError );
				return;
			}
		
			$nCountColumns = GetSize( $ColumnNames );

			// Informationen jeder einzelnen Spalte ausgeben
			//
			for ( $IndexColumns = 0; $IndexColumns < $nCountColumns; $IndexColumns++ )
			{
				$ColumnName = $ColumnNames[ $IndexColumns ];

				if( DB_HasTableColum( $sDataBase, $iFlags, $TableName, $ColumnName, $sError ) && StrLength( $sError ) == 0 )
				{
					$sDataToWrite = $sDataToWrite + "\tName: " + $ColumnName;

					DB_GetColumnType( $sDataBase, $iFlags, $TableName, $ColumnName, $ColumnType, $sError );
					$sDataToWrite = $sDataToWrite + " Type: "  + IntToStr( $ColumnType );

					DB_GetColumnSize( $sDataBase, $iFlags, $TableName, $ColumnName, $ColumnSize, $sError );
					$sDataToWrite = $sDataToWrite + " Size: "  + IntToStr( $ColumnSize );

					DB_GetColumnPrecision( $sDataBase, $iFlags, $TableName, $ColumnName, $ColumnPrecision, $sError );
					$sDataToWrite = $sDataToWrite + " Precision: "  + IntToStr( $ColumnPrecision );

					DB_IsColumnNullable( $sDataBase, $iFlags, $TableName, $ColumnName, $ColumnNullable, $sError );
					$sDataToWrite = $sDataToWrite + " Nullable: "  + IntToStr( $ColumnNullable ) + "\n";
				}
			}
		}
	}

	// Columnmetadaten wieder freigeben
	//
	DB_ReleaseColumnMetadataCache();
}


// Testaufruf
//
ondisplayfunction
{
	SetForMetadataMode( 1 );

	if ( IsMainMenuContext())
	{
		SetFunctionLabel( "Test/DBMetaData" );
		EnableFunction( 1 );
		ShowFunction( 1 );
	}
}

oncallfunction
{
	var string $sFilePath;
	var string $sDataToWrite;
	var string $sDataBase;

	$sFilePath  = "C:\\temp\\";

	$sDataBase = "METADATA";
	$sDataToWrite = "***************************************************";
	$sDataToWrite = $sDataToWrite + "\n\nDatabase: " + $sDataBase + "\n";

	Hourglass( 1 );

	GetDatabaseMetadata( $sDataBase, $sDataToWrite );
	WriteTextFile( $sDataToWrite, $sFilePath + "Metadata.txt", 0 );

	$sDataBase = "USERDATA";
	$sDataToWrite = "***************************************************";
	$sDataToWrite = $sDataToWrite + "\n\nDatabase: " + $sDataBase + "\n";

	GetDatabaseMetadata( $sDataBase, $sDataToWrite );
	WriteTextFile( $sDataToWrite, $sFilePath + "UserData.txt", 1 );

	Hourglass( 0 );
}