On-line: гостей 0. Всего: 0 [подробнее..]
АвторСообщение
администратор




Пост N: 2964
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 08.04.13 16:17. Заголовок: HBMEMIO


Что то я застрял.
Вот такой код работает
 
REQUEST HB_MEMIO
REQUEST DBFCDX

PROCEDURE Main()

dbCreate( "mem:test", { { "pole", "N", 1, 0 }},,.T.,"tmp" )
index on pole tag "test"
close tmp
dbDrop( "mem:test" )

dbCreate( "mem:test", { { "pole2", "N", 1, 0 }},,.T.,"tmp" )
index on pole2 tag "test"
close tmp
dbDrop( "mem:test" )
RETURN



Но так как работаю с ADS , код пришлось изменить и он становится не рабочим
 
REQUEST HB_MEMIO
REQUEST DBFCDX

PROCEDURE Main()

dbCreate( "mem:test", { { "pole", "N", 1, 0 }},"DBFCDX",.T.,"tmp" )
index on pole tag "test"
close tmp
dbDrop( "mem:test" )

dbCreate( "mem:test", { { "pole2", "N", 1, 0 }},"DBFCDX",.T.,"tmp" )
index on pole2 tag "test"
close tmp
dbDrop( "mem:test" )
RETURN



Как явно указать DBCREATE что юзать нужно именно HBMEMIO ?

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 42 , стр: 1 2 3 All [только новые]


администратор




Пост N: 2976
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 09.04.13 12:16. Заголовок: Pasha пишет: FErase..


Pasha пишет:

 цитата:
FErase("mem:test.cdx")


возвращает -1 и файл продолжает жить

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2977
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 09.04.13 12:29. Заголовок: Pasha Вот самодост..


Pasha

Вот самодостаточный пример
 
REQUEST HB_MEMIO
REQUEST DBFCDX
REQUEST LETO
#include "dbinfo.ch"
PROCEDURE Main()
RDDSETDEFAULT( "LETO" )

dbCreate( "mem:test", { { "pole", "N", 1, 0 },{ "pole22", "N", 1, 0 }},"DBFCDX",.T.,"tmp" )
index on pole tag test2
index on pole22 tag eeee

*Clearmemfile("tmp")
close tmp
dbdrop("mem:test")
Ferase("mem:test.cdx") // до лампочки

dbCreate( "mem:test", { { "pole2", "N", 1, 0 }},"DBFCDX",.T.,"tmp" )
index on pole2 tag test // вот тут мы упадем ;)


*Clearmemfile("tmp")
close tmp
dbdrop("mem:test")
RETURN
*************
Func Clearmemfile(_alias)
local cfile:=(_alias)->(dbinfo(DBI_FULLPATH))
local cindeks:=(_alias)->(dbOrderInfo(DBOI_FULLPATH))
(_alias)->(DbCloseArea())
hb_dbdrop(cfile,cindeks)
return nil



Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 208
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 09.04.13 12:52. Заголовок: Dima У меня все OK!...


Dima
У меня все OK!.
 
FUNCTION TestMemIO()
LOCAL cRdd

cRdd := RddSetDefault()
RddSetDefault("LETO")

dbCreate( "mem:test", { { "pole", "N", 1, 0 },{ "pole22", "N", 1, 0 }},"DBFCDX",.T.,"tmp" )
index on pole tag test2
index on pole22 tag eeee
? alias(),used(),cRdd,RddSetDefault()

close tmp
dbdrop("mem:test","mem:test","DBFCDX")

dbCreate( "mem:test", { { "pole2", "N", 1, 0 }},"DBFCDX",.T.,"tmp" )
index on pole2 tag test // вот тут мы упадем ;)

close tmp
dbdrop("mem:test","mem:test","DBFCDX")

RddSetDefault(cRdd)

RETURN


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2978
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 09.04.13 12:56. Заголовок: SergKis пишет: dbdr..


SergKis пишет:

 цитата:
dbdrop("mem:test","mem:test","DBFCDX")



Спасибо , мой косяк. Виноват ;)

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 2842
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 09.04.13 13:03. Заголовок: request dbfcdx rddSe..


request dbfcdx
rddSetDefault('DBFCDX')

У меня такой тест работает:

dbCreate('mem:test', {{'T1', 'C', 10, 0}}, 'DBFCDX', .t., 'tmp')
index on Field->t1 tag test2
? reccount(), IndexKey()
close tmp
//dbDrop('mem:test')
? FErase('mem:test.dbf')
// 0
? FErase('mem:test.cdx')
// 0

У тебя не сработал FErase из-за того, что файл уже удален вызовом dbDrop.
Хотя неясно, если dbDrop удаляет индекс, откуда он появляется вновь ?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2979
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 09.04.13 13:13. Заголовок: Pasha Косяк мой был..


Pasha
Косяк мой был в том что mem: базу создавал через DBFCDX
А в DBROP , RDD не указывал в то время как умалчиваемым RDD был ADSCDX или Leto как в примере.
Делал так Dbdrop("mem:test")
А надо было Dbdrop("mem:test",,"DBFCDX") и тогда убивается и база и индекс.
Накосячил я ;)

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2980
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 09.04.13 13:20. Заголовок: Pasha пишет: reques..


Pasha пишет:

 цитата:
request dbfcdx
rddSetDefault('DBFCDX')

У меня такой тест работает:


Сделай rddSetDefault('LETO') и тогда Ferase вернет -1

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 2843
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 09.04.13 16:44. Заголовок: Dima пишет: А надо ..


Dima пишет:

 цитата:
А надо было Dbdrop("mem:test",,"DBFCDX") и тогда убивается и база и индекс.



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

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 7564
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 22.09.23 13:38. Заголовок: Вопрос по ускорению ..


Вопрос по ускорению расчётов по DBF
Имею большую базу 350 Мб, по ней раз в неделю идут расчёты.
Есть ли смысл эту базу записать в "mem:", сделать расчёты, а потом перезаписать обратно на диск ?
Будет ли при этом ускорение при расчётах ?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4400
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 22.09.23 14:15. Заголовок: Если она поместится ..


Если она поместится в память
Для ускорения можно ключевые и если надо поля для фильтров класть в mem:, делать на них scope, filter и связывать с осн. базой, считать. У тебя база не большая, а широкая, колонки по годам, вот можешь в mem: переносить только колонки года, считать, брать другого года колонки в mem:. снова считать ..., причем колонки в мем: называешь без цифр года - получаешь универсальный расчсет.
PS. Для mem: можешь создавать из структуры базы, структуру в в mem: только одного года, append from .. переносить данные и считать, что быстрее пробуй.
То же можешь сделать и с REQUEST SQLMIX, rddSetDefault( "SQLMIX" ) есть примеры

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 7565
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 22.09.23 14:52. Заголовок: SergKis пишет: вот ..


SergKis пишет:

 цитата:
вот можешь в mem: переносить только колонки года, считать, брать другого года колонки в mem:. снова считать ..., причем колонки в мем: называешь без цифр года - получаешь универсальный расчсет.


Нет, это база одного года, по каждому абоненту.
Кол-во абонентов соответствует кол-ву записей в базе.
Правда 1/5 часть базы можно не считать, абоненты ушли.
Я хочу целиком базу записать в "mem:", не разбираться считать или не считать эту запись.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1669
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 22.09.23 14:57. Заголовок: Andrey пишет: Я хоч..


Andrey пишет:

 цитата:
Я хочу целиком базу записать в "mem:", не разбираться считать или не считать эту запись


Для начала надо выяснить, сколько времени будет занимать перенос диск->память --- память->диск. Может выяснится, что овчинка выделки не стОит.

И таки да, памяти может не хватить и будет BSOD

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 7814
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 22.09.23 15:22. Заголовок: Andrey пишет: Вопро..


Andrey пишет:

 цитата:
Вопрос по ускорению расчётов по DBF


Пересмотри алгоритм в плане оптимизации

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1670
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 22.09.23 15:27. Заголовок: Dima пишет: Пересмо..


Dima пишет:

 цитата:
Пересмотри алгоритм в плане оптимизации


+1
Может даже в отдельный поток вынести. Пусть себе считает.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 7566
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 23.09.23 12:20. Заголовок: PSP пишет: Для нача..


PSP пишет:

 цитата:
Для начала надо выяснить, сколько времени будет занимать перенос диск->память --- память->диск. Может выяснится, что овчинка выделки не стОит.
И таки да, памяти может не хватить и будет BSOD


Сделал небольшой тест на МиниГуи.
#define  _HMG_OUTLOG       
REQUEST DBFCDX, DBFFPT, HB_MEMIO
REQUEST HB_CODEPAGE_RU1251, HB_CODEPAGE_RU866, HB_CODEPAGE_UTF8
#include "hmg.ch"
///////////////////////////////////////////////////////////////////////////
PROCEDURE MAIN
LOCAL cFile, cFile2, cMsg, tTime, nSize, nSize2

SET WINDOW MAIN OFF

cFile := GetStartupFolder() + "\Abon2023.dbf"
cFile2 := "mem:" + cFileNoPath( cFile ) // create/open in memory via HB_MEMIO
tTime := HB_DATETIME()
nSize := hb_vfSize(cFile) / 1024 / 1024

hb_vfCopyFile( cFile, cFile2 )
nSize2 := hb_vfSize(cFile2) / 1024 / 1024
wApi_Sleep( 100 )

cMsg := 'Файл успешно скопирован !;;'
cMsg += cFile + ' - Размер файла: '
cMsg += HB_NtoS(nSize) + ' Мбайт; =======>>>>>> ;'
cMsg += cFile2 + ' - Размер файла: '
cMsg += HB_NtoS(nSize2) + ' Мбайт;;'
cMsg += "Затрачено времени " + HMG_TimeMS( tTime )
? AtRepl( ";", cMsg, CRLF )
? Repl("-._.",19) + Repl(CRLF,20)

HB_vfErase(cFile2) // delete after use
wApi_Sleep( 100 )

cMsg := HB_MemoRead( _SetGetLogFile() )
AlertInfo( cMsg, "Program operation log" )

RETURN

Вот результат:
Файл успешно скопирован ! 
D:\TEMP\1Test\Abon2023.dbf - Размер файла: 321.66 Мбайт
=======>>>>>>
mem:Abon2023.dbf - Размер файла: 321.66 Мбайт
Затрачено времени 00:00:00.461

Видно нужно всё таки сделать расчёт по базе в памяти !

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1671
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 23.09.23 13:09. Заголовок: Andrey пишет: Сдела..


Andrey пишет:

 цитата:
Сделал небольшой тест на МиниГуи.


Это - с диска в память. А обратно? А индексы при расчете используются? Где они будут?

 цитата:
Видно нужно всё таки сделать расчёт по базе в памяти !


Попробуй)

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 7568
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 23.09.23 16:12. Заголовок: PSP пишет: Это - с ..


PSP пишет:

 цитата:
Это - с диска в память. А обратно?


А обратно такое же время будет.
D:\TEMP\1Test\Abon2023.dbf - Размер файла: 321.66 Мбайт 
=======>>>>>>
mem:Abon2023.dbf - Размер файла: 321.66 Мбайт
=======>>>>>>
D:\TEMP\1Test\newAbon2023.dbf - Размер файла: 321.66 Мбайт
Затрачено времени 00:00:00.748


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4402
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 23.09.23 17:32. Заголовок: Andrey пишет Видно н..


Andrey пишет
 цитата:
Видно нужно всё таки сделать расчёт по базе в памяти !


Попробуй на PC с малой памятью (когда там excel, chrom запущен), открой как dbf, создай индекс с тэгами, по бегай по базе, потом говори "ГОП"

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 7815
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 23.09.23 17:43. Заголовок: SergKis пишет: Попр..


SergKis пишет:

 цитата:
Попробуй на PC с малой памятью (когда там excel, chrom запущен), открой как dbf, создай индекс с тэгами, по бегай по базе, потом говори "ГОП"


+1

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1672
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 23.09.23 19:53. Заголовок: Andrey пишет: А обр..


Andrey пишет:

 цитата:
А обратно такое же время будет.


Не буду отговаривать))

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 42 , стр: 1 2 3 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 85
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет