Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Cache+Delphi5
|
|||
|---|---|---|---|
|
#18+
Доброе время суток!! пoмогите пожалуйста решить проблемку... Есть глобальная переменная в Cache' в которой храниться очень много данных (сам файл весит около 4-5гиг). Мне нужно перенести частично все данные из глобали Cache в файл любого формата и обратно. Эт все необходимо осуществить на Delphi. Помогите Пожалуйста!!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2007, 11:59 |
|
||
|
Cache+Delphi5
|
|||
|---|---|---|---|
|
#18+
Как вариант, напиши метод который скопирует нужные тебе узлы во временный глобал и запишет его в файл... Как вызвать кащейский метод из Дельфи описано в OQS. ---------- Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2007, 14:40 |
|
||
|
Cache+Delphi5
|
|||
|---|---|---|---|
|
#18+
Если файл нужно получить на сервере, то да, а если на клиенте, наверное, через Delphi придется действовать. Вот информация о вариантах взаимодействия с Delphi . Вадим ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2007, 18:05 |
|
||
|
Cache+Delphi5
|
|||
|---|---|---|---|
|
#18+
krvsa Как вариант, напиши метод который скопирует нужные тебе узлы во временный глобал и запишет его в файл... Как вызвать кащейский метод из Дельфи описано в OQS. я еще плохо знаю программирование... как это правильно можно реализовать в коде? помогите пожалуйста... Вадим Вот информация о вариантах взаимодействия с Delphi. к сожелению, ссылка не работает... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2007, 12:55 |
|
||
|
Cache+Delphi5
|
|||
|---|---|---|---|
|
#18+
NewWorldкак это правильно можно реализовать в коде? Нечто такое Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2007, 14:28 |
|
||
|
Cache+Delphi5
|
|||
|---|---|---|---|
|
#18+
Толку то? Если человек даже ссылку поправить не в состоянии, думаешь он разберется в этом коде? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2007, 14:33 |
|
||
|
Cache+Delphi5
|
|||
|---|---|---|---|
|
#18+
Если со ссылкой не получилось в явном виде добавлю информацию о Cache' и Delphi: Высылаю Вам материалы по Delphi. Если Вы стартуете новый проект, советую убедиться, что Вы используете последнюю версию Cache' 2007.1. Информация про Delphi: В Cache' реализована концепция Единой архитектуры данных. К одним и тем же данным, хранящимся под управлением сервера многомерных данных Cache' есть три способа доступа: прямой (на уровне многомерных массивов Cache'), объектный и реляционный. Так как с реляционным доступом я думаю, Вы знакомы, стоит обратить внимание на поддержку объектов (рекомендую посмотреть на учебный курс по объектам Cache' Object QuickStart http://www.intersystems.ru/education/ObjectQS.zip, в котором есть и пример работы с Delphi, и на раздел Using Cache' Objects документации Cache') и работу с многомерными массивами Cache' (информацию можно найти в документации: Developing Applications with Cache' - Using Cache' Multi-Dimensional Storage). При установке Cache' автоматически устанавливается документация. На сайте InterSystems есть ссылка на On-line версию документации (http://docs.intersystems.com/cache20071/csp/docbook/DocBook.UI.Page.cls). Материалы про разные типы доступа к Cache' стоит просмотреть независимо от того, какой интерфейс Вы будете использовать при разработке. Вы можете использовать объектные интерфейсы Cache'. ActiveX-интерфейc позволяет Вам работать из любого ActiveX-совместимого инструментального средства (в том числе и Delphi) непосредственно с классами Cache'. Примеры Вы сможете найти в курсе Object QuickStart на нашем сайте (http://www.intersystems.ru/education/ObjectQS.zip). Есть еще интересный подход, когда экспортируют из Cache' ODL классов и используют раннее связывание, но это большая отдельная тема ... И Cache', и Delphi поддерживают работу с Web-сервисами. Вы можете работать с классами Cache' из Delphi через SOAP-интерфейс. Информацию о поддержке Web-сервисов в Cache' Вы можете найти в документации Cache' (Раздел Using SOAP and Web Services with Cache'). Вы можете использовать реляционные интерфейсы и работать с Cache' из Delphi через ODBC. При этом, можно использовать как BDE, так и ADO компоненты. Кроме стандартных компонент Delphi, Вы можете использовать компоненты третих фирм. Например, DBExpress-компоненты компании EasySoft (www.easysoft.com). Из программы на Delphi Вы можете обращаться непосредственно к многомерным массивам Cache' и запускать серверные программы с помощью компонента VisM (http://docs.intersystems.com/cache20071/csp/docbook/DocBook.UI.Page.cls?KEY=GCD_basics). В файловых архивах почтовой конференции Cache_RU можно найти дополнительную информацию по взаимодействию Delphi и Cache': - Пример на Delphi из учебного курса Pattaya (http://groups.yahoo.com/group/cache_ru/files/PattayaDelphi.zip). - Cache' класс %XML.MyBaseDataSet, который позволяет на основе запроса Cache' получить Borland MyBase (DataSnap) XML DataSet (http://groups.yahoo.com/group/cache_ru/files/MyBaseDataSet.zip). Вадим ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2007, 15:02 |
|
||
|
Cache+Delphi5
|
|||
|---|---|---|---|
|
#18+
с сылкой разобралась.... а вот код нужен не на каше а на делфи.... пожалуйста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2007, 15:04 |
|
||
|
Cache+Delphi5
|
|||
|---|---|---|---|
|
#18+
NewWorldкод нужен не на каше а на делфи.... С этим извиняй... Дельфями у нас другой человек занивается. :) Я ему квикстарт дал почитать этого ему хватило. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2007, 15:26 |
|
||
|
Cache+Delphi5
|
|||
|---|---|---|---|
|
#18+
а к кому можно обратиться? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2007, 16:36 |
|
||
|
Cache+Delphi5
|
|||
|---|---|---|---|
|
#18+
Используй компоненту VisM примерно так: procedure TForm1.Button1Click(Sender: TObject); var la : integer; a : string; fD : TFileStream; begin a := '^AAA(1)'; la := Length(a); VisM1.P1 := a; while copy(VisM1.P1,1,la) = a do begin VisM1.Execute('S P1=$Q(@P1),P2="" I P1''="" S P2=@P1'); fD.WriteLn(VisM1.P1+ #9 + VisM1.P2;) end; end; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2007, 17:52 |
|
||
|
Cache+Delphi5
|
|||
|---|---|---|---|
|
#18+
NewWorldа к кому можно обратиться? Скачать таки этот ОбжектКвикСтарт и таки его прочитать... :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2007, 09:01 |
|
||
|
Cache+Delphi5
|
|||
|---|---|---|---|
|
#18+
Игорь СойниковИспользуй компоненту VisM примерно так: procedure TForm1.Button1Click(Sender: TObject); var la : integer; a : string; fD : TFileStream; begin a := '^AAA(1)'; la := Length(a); VisM1.P1 := a; while copy(VisM1.P1,1,la) = a do begin VisM1.Execute('S P1=$Q(@P1),P2="" I P1''="" S P2=@P1'); fD.WriteLn(VisM1.P1+ #9 + VisM1.P2;) end; end; подключение происходит, а затем ошибка : "I/O error 103" ... у себя изменила только на свою функцию '^FP("Spr",PrName)' и вместо "fD.WriteLn(VisM1.P1+ #9 + VisM1.P2;)" изменила на "WriteLn(VisM1.P1+ #9 + VisM1.P2);" из-за чего может быть ошибка, из-за списка...?? (( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2007, 10:07 |
|
||
|
Cache+Delphi5
|
|||
|---|---|---|---|
|
#18+
Писал в спешке у FileStream нет метода WriteLn только Write(буфер, размер буфера) см.Help ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2007, 11:02 |
|
||
|
Cache+Delphi5
|
|||
|---|---|---|---|
|
#18+
спасибо огромнеешее!!!!! запись в файл происходит!!! :) а еще один вопросик тоже самое только наоборот т.е. запись из файла в переменную каше? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2007, 12:02 |
|
||
|
Cache+Delphi5
|
|||
|---|---|---|---|
|
#18+
эээээээээх...не то оно делает.... в файл записывается строка "а" т.е. название переменной. procedure TFmLoad.Button1Click(Sender: TObject); var la : integer; a : string; F : TFileStream; begin if FileExists('test.dat') then f:=TFileStream.Create('test.dat',fmOpenWrite+fmShareDenyNone) else f:=TFileStream.Create('test.dat',fmCreate); a := '^FP("Dt",PrName)'; la := Length(a); VisM1.P1 := a; while copy(VisM1.P1,1,la) = a do begin VisM1.Execute('SetSM^Ft'); F.Write(pchar(a)^,length(a)); end; end; в файл записывается " ^FP("Dt",PrName)^FP("Dt",PrName)^FP("Dt",PrName)^FP("Dt",PrName).. " и так весь файл... ((( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2007, 12:32 |
|
||
|
Cache+Delphi5
|
|||
|---|---|---|---|
|
#18+
естественно т.к. возвращаются переменные от P0 до P9. по моему примеру желательно сделать так: a - изменять нельзя b := VisM1.P1; // это индекс (ссылка на глобаль) c := VisM1.P2; // это содержимое запись должна иметь формат (длина индекса)_индекс_(длина данных)_содержимое var lb : word; lc : word; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2007, 15:02 |
|
||
|
Cache+Delphi5
|
|||
|---|---|---|---|
|
#18+
var lb,lc : word; // lb := length(b); lc := length(c); buf := lb + b + lc + c; /не забудте про преобразование; write(buf, length(buf); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2007, 15:05 |
|
||
|
Cache+Delphi5
|
|||
|---|---|---|---|
|
#18+
спасибо огромное, сейчас буду пробывать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2007, 10:03 |
|
||
|
Cache+Delphi5
|
|||
|---|---|---|---|
|
#18+
вот вызываю... procedure TFmLoad.Button1Click(Sender: TObject); var la : integer; lb,lc : word; a,b,c: string; F : TFileStream; buf : PChar; begin if FileExists('test.dat') then f:=TFileStream.Create('test.dat',fmOpenWrite+fmShareDenyNone) else f:=TFileStream.Create('test.dat',fmCreate); a := '^FP("MorionSpr",PrName)'; VisM1.P1:='^FP("Spr")'; b := VisM1.P1; VisM1.P2:='PrName'; c := VisM1.P2; la := Length(a); lb := length(b); lc := length(c); VisM1.P1 := a; while copy(VisM1.P1,1,la) = a do begin VisM1.Execute('SetSM^Ft'); buf := StrToPChar(IntToStr(lb) + b + IntToStr(lc) + c); F.Write(buf, length(buf)); end; ShowMessage('Çàïèñü äàííûõ â ôàéë çàâåðøåí.'); end; а в файл записывается непонятно что... аAЊ AЊ а@Њ hх ¬^B 8ЊBЊ AЊ а@Њ hх ¬^B 8dCЊ AЊ а@Њ hх ¬^B 8<DЊ AЊ а@Њ hх ¬^B 8EЊ AЊ а@Њ hх ¬^B 8мEЊ AЊ а@Њ hх ¬^B 8ДFЊ AЊ а@Њ hх ¬^B 8њGЊ AЊ а@Њ hх ¬^B 8tHЊ AЊ а@Њ hх ¬^B 8LIЊ AЊ а@Њ hх ¬^B 8$JЊ AЊ а@Њ hх ¬^B 8ьJЊ AЊ а@Њ hх ¬^B 8ФKЊ AЊ а@Њ hх ¬^B 8¬LЊ AЊ а@Њ hх ¬^B 8„MЊ AЊ а@Њ hх ¬^B 8\NЊ AЊ а@Њ hх ¬^B 84OЊ AЊ а@Њ hх ¬^B 8PЊ AЊ а@Њ hх ¬^B 8дPЊ и.т.д. че делать?? :(( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2007, 13:20 |
|
||
|
Cache+Delphi5
|
|||
|---|---|---|---|
|
#18+
или еще так.... мAЊ$AЊAЊа@Њ hх¬^BBЊ$AЊAЊа@Њ hх¬^BpCЊ$AЊAЊа@Њ hх¬^BHDЊ$AЊAЊа@Њ hх¬^B EЊ$AЊAЊа@Њ hх¬^BшEЊ$AЊAЊа@Њ hх¬^BРFЊ$AЊAЊа@Њ hх¬^BЁGЊ$AЊAЊа@Њ hх¬^BЂHЊ$AЊAЊа@Њ hх¬^BXIЊ$AЊAЊа@Њ hх¬^B0JЊ$AЊAЊа@Њ hх¬^BKЊ$AЊAЊа@Њ hх¬^BаKЊ$AЊAЊа@Њ hх¬^BёLЊ$AЊAЊа@Њ hх¬^BђMЊ$AЊAЊа@Њ hх¬^BhNЊ$AЊAЊа@Њ hх¬^B@OЊ$AЊAЊа@Њ hх¬^BPЊ$AЊAЊа@Њ ( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2007, 13:23 |
|
||
|
Cache+Delphi5
|
|||
|---|---|---|---|
|
#18+
У Вас случайно в Cache не Unicode? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2007, 13:43 |
|
||
|
Cache+Delphi5
|
|||
|---|---|---|---|
|
#18+
Вы же как присвоили первоначальные значения для a и b так их и не изменяете после выполнения программы в Cache!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2007, 13:51 |
|
||
|
Cache+Delphi5
|
|||
|---|---|---|---|
|
#18+
да... так а если их обратно из файла в глобаль... уже не получиться? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2007, 14:10 |
|
||
|
Cache+Delphi5
|
|||
|---|---|---|---|
|
#18+
Очень даже получится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2007, 14:51 |
|
||
|
Cache+Delphi5
|
|||
|---|---|---|---|
|
#18+
обратно точно так же через copy()?? а как на счет unicode, он распознает? еще вопросик: а вот если у меня есть глобальная переменная с данными, но она нигде в программе не используется и не вызывается (в ней просто хранятся данные). то данные хранящиеся в ней можно записать в файл не используя VisM1.Execute() ?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2007, 15:20 |
|
||
|
Cache+Delphi5
|
|||
|---|---|---|---|
|
#18+
смотрите пример будет работать в любой кодировке. если только не переносить в другую систему с другой кодировкой. VisM1.Execute - выполняет любую строку языка и к программам не имеет ни какого отношения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2007, 17:58 |
|
||
|
Cache+Delphi5
|
|||
|---|---|---|---|
|
#18+
СПАСИБО ОГРОМНОЕ!!!! буду разбираться.... :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2007, 09:45 |
|
||
|
Cache+Delphi5
|
|||
|---|---|---|---|
|
#18+
а почему происходит зацикливание на while? while copy(VisM1.P1,1,la) = a do begin VisM1.P2 := null; VisM1.Execute('I $D(@P1) S P2=@P1'); if VisM1.P2 <> null then begin WriteStr(VisM1.P1); WriteStr(VisM1.P2); end; VisM1.Execute('S P1=$Q(@P1)'); end; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2007, 14:30 |
|
||
|
Cache+Delphi5
|
|||
|---|---|---|---|
|
#18+
и в файл ничего не записывается... почему? может я не то записываю в edit1 := '^FP("M",PrName)' в глобальной переменной, такие данные: --------------------------------------------- ^FP("M",2)=<<"name2"_$C(9)_"INN">> ^FP("M",3)=<<"name3"_$C(9)_"INN">> ^FP("M",4)=<<"name4"_$C(9)_"INN">> ^FP("M",5)=<<"name5"_$C(9)_"INN">> ^FP("M",6)=<<"name6"_$C(9)_"INN">> ^FP("M",7)=<<"name7"_$C(9)_"INN">> и т.д.... --------------------------------------------- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2007, 14:55 |
|
||
|
Cache+Delphi5
|
|||
|---|---|---|---|
|
#18+
Извините за вопрос: имеет ли значение куда писать файл: на сервере или на клиенте? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2007, 15:04 |
|
||
|
Cache+Delphi5
|
|||
|---|---|---|---|
|
#18+
данные из глобали сервера записать нужно в файл любого расширения. и обратно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2007, 15:26 |
|
||
|
Cache+Delphi5
|
|||
|---|---|---|---|
|
#18+
NoGotИзвините за вопрос: имеет ли значение куда писать файл: на сервере или на клиенте? ну главное что бы в файл данные записывались. а сам файл будет храниться в каталоге программы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2007, 16:02 |
|
||
|
Cache+Delphi5
|
|||
|---|---|---|---|
|
#18+
VisM - работает там где установлена клиентская часть Cache. У Вас в ссылке находится неопределенная переменная . Поэтому и не работает ссылка должна быть полностью определена: ^AAA("индекс1","индекс2") ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2007, 17:45 |
|
||
|
Cache+Delphi5
|
|||
|---|---|---|---|
|
#18+
и еще добавьте в проект SaveDialog и OpenDialog и пишите и восстанавливайте откуда угодно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2007, 17:49 |
|
||
|
Cache+Delphi5
|
|||
|---|---|---|---|
|
#18+
спасибо за помощь!!!! буду пробывать :) !!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2007, 18:14 |
|
||
|
Cache+Delphi5
|
|||
|---|---|---|---|
|
#18+
Спрашивал так, потому что такую задачу лучше было бы решать непосредственно в каше, один раз вызвав метод. То есть расположив цикл непосредственно в каше. К тому же визм не очень быстр как мне кажется... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2007, 07:38 |
|
||
|
Cache+Delphi5
|
|||
|---|---|---|---|
|
#18+
не пойму почему данные не записываются... от меня же требуется записать: Код: plaintext Код: plaintext что ж я не так делаю то? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2007, 11:15 |
|
||
|
Cache+Delphi5
|
|||
|---|---|---|---|
|
#18+
NoGotСпрашивал так, потому что такую задачу лучше было бы решать непосредственно в каше, один раз вызвав метод. То есть расположив цикл непосредственно в каше. К тому же визм не очень быстр как мне кажется... это что типа того как предлогал krvsa ?? krvsa Код: plaintext 1. 2. 3. 4. 5. 6. ?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2007, 11:19 |
|
||
|
Cache+Delphi5
|
|||
|---|---|---|---|
|
#18+
В моем примере все делает Кащей. ---------- Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2007, 11:24 |
|
||
|
Cache+Delphi5
|
|||
|---|---|---|---|
|
#18+
Потому, что метод в Cache выполнится на сервере, а не не клиенте. т.е. файл будет сохранятся исключительно на сервере, что с точки зрения безопасности системы не очень хорошо. Поэтому и делается сохранение на клиенте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2007, 11:34 |
|
||
|
Cache+Delphi5
|
|||
|---|---|---|---|
|
#18+
Код: plaintext Код: plaintext ^FP("MS","индекс"), что при условии завершения ^FP("MS","" '= ^FP("MS","индекс" надо задавать ^FP("MS") - сохраняется все поддерево "MS" или конкретное значение второго индекса для сохранения, поддерева второго индекса ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2007, 11:39 |
|
||
|
Cache+Delphi5
|
|||
|---|---|---|---|
|
#18+
Обьясните пожалуйста про безопасность, я не совсем понял... Учитывая, что данных очень много (в условии задачи), то таким внешним циклом тягать данные вы будете очень долго... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2007, 12:16 |
|
||
|
Cache+Delphi5
|
|||
|---|---|---|---|
|
#18+
все, получилось!!!! нужно было мне еще вместо P2:=null записать P2:='1' и все получилось как надо: Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2007, 12:23 |
|
||
|
Cache+Delphi5
|
|||
|---|---|---|---|
|
#18+
Про безопасность: имеем выделенный сервер Cache. Доступ к файловой системе пользователям закрыт. теперь выполняем метод на сервере. В итоге: пользователь выполняющий метод с доступом к файловой системе имеет доступ к файловой системе сервера и делает там, несанкционированные действия. Да и к результатам работы метода, тоже не будет иметь доступа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2007, 12:30 |
|
||
|
|

start [/forum/topic.php?all=1&fid=39&tid=1559108]: |
0ms |
get settings: |
7ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
67ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
86ms |
get tp. blocked users: |
2ms |
| others: | 243ms |
| total: | 451ms |

| 0 / 0 |
