Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Имя таблицы = 8 символов [dBase, FoxPro]


TTCustomDelphiMaster ©   (2002-10-02 17:23:00) 

Здравствуйте, Уважаемые коллеги.

Сегодня столкнулся с проблеммой, но для ее решения не хватает теоретических знаний, а для их получения - времени.
Вообщем работаю с dbf через DAO. Нужно создать таблицу с именем v1234567890 (имя файла v1234567890.dbf), но создается таблица с именем V1234567 (имя файла V1234567.dbf). Т.е. имя файла обрезается до 8 символов. Как создать таблицу у которой длина имени больше 8 символов?

Вот кусочки кода, которые может что-то прояснят (извеняюсь, но код на VC):


CDaoDatabase * m_pDbf;
CDaoRecordset * m_pSet;

...
CString sConnect;
TRY
{
m_pDbf = new CDaoDatabase();
sConnect.Format( "dBASE IV; DATABASE=%s", m_NevaCfg.GetDbfPath() );
m_pDbf->Open(_T(""), FALSE, FALSE, sConnect );
m_pSet = new CDaoRecordset( m_pDbf );
}

...

CString sFieldName;
CFileFind ff;
CDaoTableDef td(m_pDbf);

td.Create( "v1234567890");
td.CreateField( _T("DAT"), dbDate, 8 );
td.CreateField( _T("TIM"), dbText, 8 );
for (i = 1; i <= m_NevaCfg.GetAnalogsNum( nMPC ); i++)
{
sFieldName.Format( "CH%d", i );
td.CreateField( sFieldName, dbSingle, 4 );
}
td.Append();
td.Close();


Заранее спасибо за ответы.


NickBat   (2002-10-03 10:44:00) [1]

Дело в том, что старый dBase формат не поддерживает длинные имена файлов. Если попробывать через досовский Фокс открыть файл с длинным именем он его обрезает с тильдой. А при сохранении в файл с длинным именем просто оставляет первые восемь символов. Так, что тут подойдет совет Jeer.


Max Zyuzin   (2002-10-03 10:10:00) [2]

Скорее всего все закопано в том, что dBase старый формат, созданный еще под DOS, а там как известно ограничение на имя файла - 8 символов (+ 3 на расширенее).
Как помочь? А почему Вы выбрали именно dBase? Может что поновее использовать?


TTCustomDelphiMaster   (2002-10-03 05:17:00) [3]

Я тут подумал, не плоучится то что советует Jeer.
Кто работал с CDaoTableDef помогите.


TTCustomDelphiMaster   (2002-10-02 23:14:00) [4]

Jeer © (02.10.02 23:00)

А вот это я как раз упустил. Надо попробовать. Хотя думаю, что шансы не большие. Но все равно спасибо.


Jeer   (2002-10-02 23:00:00) [5]

Создай "tmp.dbf"
Затем файловой операцией Rename
Затем td.Ореn(NewName)


MsGuns   (2002-10-02 22:59:00) [6]

>TTCustomDelphiMaster © (02.10.02 22:57)

Сочувстую. Сопереживаю. Желаю успеха


TTCustomDelphiMaster   (2002-10-02 22:57:00) [7]

Поясняю
Мне нужно создать файл vd02100301.dbf
Я делаю td.Create("v1234567890");
Получается файл vd021003.dbf , т.е. CDaoTableDef при создании новой таблицы почему то обрезает имя файла.

Альтернативные варианты не принимаются, т.к. если не удастся реализовать то что я задумал у меня уже есть 2 запасных варианта (но они маленько кривоваты, т.е. могут вызвать проблемы при определенных обстоятельствах).

Кардинальные изменения так же не допустимы, т.к. этот код является частью большого проекта, а у меня есть исходники только этой dll.


MsGuns   (2002-10-02 22:41:00) [8]

Во-первых, а почему, собственно 8 символов ?. Это что, передается затем в DOS ?

Во вторых, когда-то сталкивался с подобной проблемой, когда надо было часто сохранять кучу мааааленьких файлов с произвольными, но РАЗНЫМИ, именами.
Решил ее с помощью каталогов. Пример, имя создаваемого каталога - DDMMGGxx (год, месяц, число), а внутри типа по времени. 8 символов для отображения ччммсс хватает


TTCustomDelphiMaster   (2002-10-02 18:52:00) [9]

Ну хоть какую нибудь мысль. А?


Наверх

Титульная страница Поиск, карта сайта Написать письмо