Hi I have posted this problem already long time ago but I never found the time to test it again. http://www.winehq.org/hypermail/wine-devel/2002/11/1530.html But now I tried with the actual wine from cvs (2003-12-03) and it's still there. The problem is that if I try to create a table in a Access database the last char of the name gets lost. I now have a small program which shows this error, maybe someone can use it for finding this bug. It's a simple VC6 Wizard generated Win32 command line app which uses MFC for DAO. The first time I tried was with SUSE 8.0, now I have Knoppix 3.3 (Debian). Thanks bye Fabi ---------------------------- mdbtest.cpp // mdbtest.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <afxdao.h> // MFC DAO database classes #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif LPCTSTR lpszTableNodeTable = "Nodes"; LPCTSTR lpszTableNodeName = "NodeName"; LPCTSTR lpszTableNodeNodeType = "NodeType"; LPCTSTR lpszTableNodeBuildCL = "BuildCL"; LPCTSTR lpszTableNodeEditCL = "EditCL"; LPCTSTR lpszTableNodePath = "Path"; LPCTSTR lpszTableNodeFlags = "Flags"; LPCTSTR lpszTableNodeParam1 = "Param1"; LPCTSTR lpszTableNodeParam2 = "Param2"; LPCTSTR lpszTableNodeParam3 = "Param3"; LPCTSTR lpszTableNodeParam4 = "Param4"; ///////////////////////////////////////////////////////////////////////////// // The one and only application object CWinApp theApp; using namespace std; //----------------------------------------------------------------------------- void CreateNodeTable(CDaoDatabase* pDB) // throws CDaoException and CMemoryException { CDaoTableDef nodeDef(pDB); // attempt to create a new table def nodeDef.Create(lpszTableNodeTable); CDaoFieldInfo DaoFieldInfo; // init members DaoFieldInfo.m_strName = lpszTableNodeName; DaoFieldInfo.m_nType = dbText; DaoFieldInfo.m_lSize = 255; DaoFieldInfo.m_lAttributes = dbVariableField; DaoFieldInfo.m_nOrdinalPosition = 0; DaoFieldInfo.m_bRequired = FALSE; DaoFieldInfo.m_bAllowZeroLength = TRUE; DaoFieldInfo.m_lCollatingOrder = 0; // create name field nodeDef.CreateField(DaoFieldInfo); // create type field DaoFieldInfo.m_strName = lpszTableNodeNodeType; DaoFieldInfo.m_lSize = 30; nodeDef.CreateField(DaoFieldInfo); // create path field DaoFieldInfo.m_strName = lpszTableNodePath; DaoFieldInfo.m_lSize = 255; nodeDef.CreateField(DaoFieldInfo); // create flags field nodeDef.CreateField(lpszTableNodeFlags, dbLong, 4, dbFixedField); // create build command line field DaoFieldInfo.m_strName = lpszTableNodeBuildCL; DaoFieldInfo.m_nType = dbMemo; nodeDef.CreateField(DaoFieldInfo); // create edit command line field DaoFieldInfo.m_strName = lpszTableNodeEditCL; DaoFieldInfo.m_nType = dbMemo; nodeDef.CreateField(DaoFieldInfo); DaoFieldInfo.m_nType = dbMemo; //DaoFieldInfo.m_lSize = 200; DaoFieldInfo.m_strName = lpszTableNodeParam1; nodeDef.CreateField(DaoFieldInfo); // create Param cl field DaoFieldInfo.m_strName = lpszTableNodeParam2; nodeDef.CreateField(DaoFieldInfo); // create Param cl field DaoFieldInfo.m_strName = lpszTableNodeParam3; nodeDef.CreateField(DaoFieldInfo); // create Param cl field DaoFieldInfo.m_strName = lpszTableNodeParam4; nodeDef.CreateField(DaoFieldInfo); // create Param cl field nodeDef.Append(); // append table def to database nodeDef.Close(); // end CreateNodeTable } int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]) { int nRetCode = 0; // initialize MFC and print and error on failure if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0)) { // TODO: change error code to suit your needs cerr << _T("Fatal Error: MFC initialization failed") << endl; nRetCode = 1; } else { // TODO: code your application's behavior here. CString m_Path="test.mdb"; CDaoDatabase db; CDaoRecordset rsNode(&db); // rs node try { // create database if not available cout << "Creating Database\n"; try { db.Create(m_Path); db.Close(); } catch (CDaoException* de) { // already exists I guess cout << "Database already existed\n"; de->Delete(); } cout << "Opening Database\n"; // try to open database db.Open(m_Path, TRUE, FALSE, _T("")); // --- delete old node and dependency tables and save new ones --- cout << "Deleting Tabledef\n"; try { // delete node table db.DeleteTableDef(lpszTableNodeTable); } catch (CDaoException* dde) { // catch error, maybe table def hasn't existed dde->Delete(); } cout << "Creating new Tabledef\n"; // create node table CreateNodeTable(&db); cout << "Opening Table\n"; // try to open node table rsNode.Open(dbOpenDynaset, CString(_T("Select * From [")) + lpszTableNodeTable + _T("]"), 0); // look if recordset is updateable if (!rsNode.CanUpdate()) { cout << "No Update\n"; } cout << "Closing Table\n"; // close tables rsNode.Close(); cout << "Closing Database\n"; // close database db.Close(); cout << "Deleting Database\n"; DeleteFile(m_Path); } catch (CDaoException* de) { // catch database exception char msg[256]; de->GetErrorMessage(msg, 256); cout << "Error:" << msg; de->Delete(); goto failure_exit; } catch (CMemoryException* me) { // catch memory exception char msg[256]; me->GetErrorMessage(msg, 256); cout << "Error:" << msg; me->Delete(); goto failure_exit; } cout << "OK\n"; return TRUE; failure_exit: // do some cleanup after failure if (rsNode.IsOpen()) rsNode.Close(); if (db.IsOpen()) db.Close(); } cout << "ERROR!!\n"; return nRetCode; }