Datenbankeinträge werden immer überschrieben



  • Hallo alle zusammen,

    ich habe folgendes Problem. Ich habe mit Hilfe von "oo4o" und C++ eine Datenbankverbindung zu einer Oracle-Datenbank (9.2.) aufgebaut.

    OSession session ("Session1");
    
    	ODatabase tricsy(session, "ORA920", "tricsy", "tric24");
    
    	ODynaset odyn(tricsy, "select * from wafermaps");
    	if (!odyn.IsOpen()){ 
    		write2Log("Tricsy-Database is not open");
    	}
    
    	OValue val;
    	val.SetEmpty();
    	odyn.AddNewRecord();
    	oresult ores = odyn.SetFieldValue("content", val);
    	ores = odyn.Update();
    	ores = odyn.SetFieldValue("path", path2);
    	ores = odyn.Update();
    	ores = odyn.SetFieldValue("name", name2);
    	ores = odyn.Update();
    
    	OClob oclob ;
    	odyn.StartEdit();
    	odyn.GetFieldValue("content", &oclob);
    
    	unsigned char *buffer = 0;
    
    	try{
    		unsigned long optchunk = oclob.GetOptimumChunkSize();
    		unsigned int bufsize = ((int) (32768/optchunk)) *optchunk;
    		buffer = (unsigned char *)malloc(bufsize);
    
    		fstream fs;
    		fs.open("waferlayout.txt", ios::in);
    		fs.setmode(filebuf::binary);
    		fs.seekg(0, ios::end);
    		unsigned long filesize = fs.tellg();
    		fs.seekg(0, ios::beg);
    
    		unsigned long totalwritten = 0;
    		unsigned long amtread = 0;
    		int piecetype = OLOB_FIRST_PIECE;
    
    		if (filesize <= bufsize)
    			piecetype = OLOB_ONE_PIECE;
    		else 
    			oclob.EnableStreaming(filesize);
    
    		while(totalwritten != filesize){
    			fs.read(buffer, bufsize);
    			amtread = fs.gcount();
    
    			oclob.Write(buffer, amtread, piecetype);
    			totalwritten = totalwritten + amtread;
    
    			if ((filesize - totalwritten) <= bufsize) piecetype = OLOB_LAST_PIECE;
    			else piecetype = OLOB_NEXT_PIECE;
    		}
    
    		oclob.DisableStreaming();
    		ores = odyn.Update();
    		fs.close();
    	}
    
    	catch(OException E){
    
    	}
    
    	if (buffer) free(buffer);
    

    Dieser Code ist 1 zu 1 aus dem Beispiel von Oracle. Es funktioniert auch, wenn man den ersten Datensatz in die Datenbank schreibt. Wenn ich mein Programm neu starte bzw. innerhalb meines Programms einen zweiten Datensatz reinschreiben möchte wird immer die "Content"-Spalte vom ersten Datensatz überschrieben und alle anderen "content"-Spalten bleiben leer.

    Was ist das Problem?

    Viele Grüße
    Jana


Anmelden zum Antworten