Форум » [x]Harbour » MEMORY_ТАБЛЕ » Ответить

MEMORY_ТАБЛЕ

Vlad04: Можно скопировать выборку в таблицу в памяти (MEMORY) одной командой типа Copy To Temp или только создать, и потом копировать по записям?

Ответов - 22, стр: 1 2 All

Dima: Пробовать надо что то типа Copy To mem:Temp , но думаю не сработает.

Vlad04: ********************************************/ PROCEDURE MAIN() REQUEST DBFCDX , DBFFPT REQUEST HB_CODEPAGE_RU866 hb_SetCodepage("RU866") set date brit set century on Select 0 Use NASP Via "DBFCDX" alias Nasp index on Left(code,8) tag i1 OrdSCope(0,"56000005") OrdScope(1,"56000005") // Set filter to Left(code,8) = "56000004" go top browse(1,1,30,78) Copy to "mem:test" Close Nasp Select 0 Use "mem:test" Via "DBFCDX" Alias memTabl ?'1',lastrec() ?'1' wait browse(1,1,30,78) CLOSE all Select 0 Use "mem:test" Via "DBFCDX" Alias memTabl ?'2',lastrec() ?'2' ?'2' wait browse(5,1,30,78) // Close ("mem:test") DBDROP("mem:test") // Free memory resource Select 0 ?'3',lastrec() ?'3' ?'3' wait Use "mem:test" Via "DBFCDX" Alias memTabl browse(15,1,30,78) Return хХарбоур 1.0 Получилось

Dima: Vlad04 пишет: Получилось Нежданчик


SergKis: Dima пишет:Нежданчик так тоже работает. DbCreate("mem:Temp", aStru, "DBFCDX", .T., "TMP" ) __dbTrans( nDstArea, aFieldsStru, cFor, cWhile, nNext, nRecord, lRest )

Vlad04: SergKis Отдельной операцией наверно надо структуру исходной базы записывать записывать в массив? А отношении моего примера. Скорее всего создается временная таблица с именем "mem:test", а не таблица в памяти. В реальной программе потребовалось указать путь, иначе ошибка Copy to "c:\temp\mem:test" Use "c:\temp\mem:test"

SergKis: Vlad04 вот пример использования (выдран из реального) с расширением структуры (если расширять\сужать не надо то copy to ... достаточно): [pre2] REQUEST DBFCDX, HB_MEMIO ... LOCAL aStru, nSrcArea, nDstArea, cMemFile, aFldStru ... USE K3.DBF ALIAS K3 NEW nSrcArea := select() aStru := DbStruct() aFldStru := DbStruct() cMemFile := 'mem:'+alias()+'_' aAdd(aStru, {'R_KOL1', 'N', 15, 3}) // добавим new field aAdd(aStru, {'R_CEN1', 'N', 15, 4) aAdd(aStru, {'R_SUM1', 'N', 15, 2}) DbDrop(cMemFile, cMemFile, 'DBFCDX') DbCreate(cMemFile, aStru, 'DBFCDX',.T., "TMP" ) nDstArea := select() DbSelectArea(nSrcArea) __dbTrans( nDstArea, aFldStru, {|| ! empty(DATA_P)}, , , , ) // FOR DbCloseArea() DbSelectArea(nDstArea) DbGotop() DO WHILE !EOF // вычисляем new field REPL R_KOL1 with R_K1 + R_K2 + R_K3 - R_K4 REPL R_SUM1 with R_S1 + R_S2 + R_S3 - R_S4 IF ! empty(R_KOL1) REPL R_CEN1 with R_SUM1 / R_KOL1 ENDIF SKIP ENDDO DbCloseArea() DbDrop(cMemFile, cMemFile, 'DBFCDX') [/pre2]

SergKis: Vlad04 пишет:Скорее всего создается временная таблица с именем "mem:test", а не таблица в памяти. В реальной программе потребовалось указать путь, иначе ошибка при указании пути, думаю файл создавался на диске. надо Copy to ( "mem:test" ) Use ( "mem:test" ) Via "DBFCDX" Alias memTabl и лучше DbDrop("mem:test", "mem:test", 'DBFCDX') не надо думать был индекс у таблицы или нет.

Dima: SergKis пишет: DbDrop("mem:test", "mem:test", 'DBFCDX') не надо думать был индекс у таблицы или нет. А разве вот так индекс не завалится ? DbDrop("mem:test",, 'DBFCDX')

SergKis: Dima пишет:А разве вот так индекс не завалится ? DbDrop("mem:test",, 'DBFCDX') DbDrop(<mem:dbf>,<mem:ind>, 'DBFCDX') - удаляются парой, если есть Use ("mem:test") .... Index ... ("mem:test") ... dbDrop("mem:test", , 'DBFCDX') Use ("mem:test") .... Index ... ("mem:test") свалится (остался инд.файл) и что бы не думать был индекс у таблицы или нет, делаю всегда DbDrop("mem:test", "mem:test", 'DBFCDX') до dbCreate("mem:test",...) и по завершении использования таблицы mem:test

Dima: SergKis пишет: до dbCreate("mem:test",...) и по завершении использования таблицы mem:test Понял. Спасибо. Пошел свою прогу полировать PS Упс , исправил 87 исходников.

Dima: SergKis пишет: Index ... ("mem:test") Оригинально. Ведь если индекс строится как TAG то вот это ("mem:test") тут не нужно. Собственно изначально я смотрел пример в harbour\contrib\hbmemio\tests\test.prg

SergKis: Dima пишет:то вот это ("mem:test") тут не нужно это показано образно, схематичное перечесление команд, чтобы высветить проблему. подробнее уже было в теме http://clipper.borda.ru/?1-4-0-00000831-000-0-0-1365515056 от Отправлено: 08.04.13 21:07. Заголовок: REQUEST DBFCDX REQU..

Dima: SergKis пишет: подробнее уже было в теме Согласен. Проехали.

Vlad04: SergKis Я на Харборе 1.0 REQUEST HB_MEMIO не понимает

Dima: Vlad04 Библу Hbmemio тоже не линковал ?

Vlad04: какая библиотека в на xХарборе 1.0 подключает mem: ? hbmemio.lib такой нет

Dima: xharbour\contrib\filemem Правда у меня xHarbour 1.2.3 Intl

Vlad04: В 1.0 нет Выложи куда нибудь

Andrey: Vlad04 пишет: на xХарборе 1.0 Переходи на 1.2.3 - стабильнеё работа на порядок !

Dima: Vlad04 http://my-files.ru/lr614v



полная версия страницы