На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как прочитать список файлов, поддиректорий в директории?
5. Как запустить программу/файл?
... (продолжение следует) ...

Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.


Внимание
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...
Модераторы: jack128, D[u]fa, Shaggy, Rouse_
Страницы: (3) 1 2 [3]  все  ( Перейти к последнему сообщению )  
> xml и delphi
    А как же?
    Цитата Smike @
    1) TXMLDocument (Internet Tab)
    Скажу сразу, парсер - отвратительный. Если даже промолчать о его "тормознутости", то в нем еще куча неудобств. Например, отсутствие текста нода или атрибута приводит к весьма нежелательным сообщениям об ошибках, вместо того, чтобы "вежливо промолчать" и возвратить пустую строку. Это вынуждает программиста производить проверку на наявность атрибута или текста нода, что тоже сильно сказывается на производительности. Можно еще ставить try..except, но от этого не становится легче, особенно на этапе проектирования. Одним словом, код получается более громоздким и непонятным.
      tyoma_first, я не опровергаю своих собственных слов по поводу TXMLDocument, но все таки нужно вставить одно "но": если не использовать биндинги. Если их использовать и документ должен быть определенной четкой структуры, то TXMLDocument — просто конфетка. Собственно, в коде его использование совершенно не видно. С помощью мастера XML Data Binding Wizard получаем интерфейс и используем его в коде.

      Но использовать XML Document для больших документов неопределенной структуры я бы без особенной надобности не стал.
        Oк, спасибо. Мне как раз нужно использовать документы четко определенной структуры.
          ExpandedWrap disabled
            procedure TForm1.bbReadXMLClick(Sender: TObject);
            var
              XMLDoc: TXMLDocument;
              Node,NodeSvc: IXMLNode;
              i,j:Integer;
            begin
                CoInitialize(nil);
                XMLDoc:= TXMLDocument.Create(nil);
                XMLDoc.LoadFromFile(ExtractFilePath(Application.ExeName)+'otvet.xml');
                XMLDoc.Active := true ;
                Node := XMLDoc.DocumentElement.ChildNodes[0];

          У меня на последней из приведенных строк выскакивает окошко с таким содержимым:
          ---------------------------
          Debugger Fault Notification
          ---------------------------
          Project C:\Program Files\Borland\Delphi7\Projects\XMLproga\MyXML.exe raised too many consecutive exceptions:
          'access violation at 0x00000000: read of address 0x00000000'. Process Stopped. Use Step or Run to continue.
          ---------------------------
          OK Help
          ---------------------------

          Что неправильно?

          XML-файл:
          ExpandedWrap disabled
             <Provs_Lst>
                    <Prov id="1">
                        <name>Поставщик_1</name>
                        <Prov_Svcs>
                            <Svc id="1">
                                  <Svc_Name>Вид_оплаты_1</Svc_Name>
                                  <min_amount>1000</min_amount>
                             </Svc>
                             <Svc id="2">
                                  <Svc_Name>Вид_оплаты_2</Svc_Name>
                                  <min_amount>1000</min_amount>
                             </Svc>
                        </Prov_Svcs>
                    </Prov>
                    <Prov id="5">
                         .... аналогичное заполнение....
                    </Prov>
             <Provs_Lst>

          Так понимаю, та злополучная строка должна ссылаться на блок <Prov id="1"> ... </Prov> ?

          WinXP_sp2, Delphi 7
            Smike
            Очень хочется от тебя услышать совета по выбору класса или компонента или еще чего-нить, для работы с XML.
            Ситуация такова:
            1. Работа в памяти
            2. Динимическое создание документа, с указанием новых значений. Интервал обновления может быть, раз в 1 сек. Кол-во параметров не более 500
            3. Созданный динамично XML-документ передается через сеть подключенным и клиентам, и выдается им по запросу от них, к примеру после посылки команды: 'Data' или 'Init' Кол-во клиентов может быть до 100 одновременно сидящих на данной Проге.

            Я останавливаюсь на TjanXMLParser2, но друг активно уверяет,что мол TXMLParser еще лучше.

            Прошу помощи в выборе метода работы с XML.
              Мое мнение таково: если документ четко структурирован, то намного удобнее будет связка TXMLDocument + биндинг. Кроме того в таком режиме TXMLDocument работает очень быстро.

              Если же документ может иметь произвольную структуру (хотя это довольно редкий случай для программно-генерируемых документов), то тогда можно выбрать и другой парсер. К сожелению немогу ничего сказать о стабильности работы TjanXMLParser2, т.к. кроме этого теста больше нигде его не использовал. Да и после TECXMLParser перешел на TXMLDocument с использованием биндингов.

              Кстати идея. Неплохо бы сравнить производительность TXMLDocument + биндинги с другими парсерами :rolleyes:
                Меня волнует вопрос быстродействия!
                Причина:

                Мое ПО будет запускаться на машине где 1) работает другая, довольно серьезная SCADA-система и она ресурсоемка. 2) Завесить или затормозить по вине моего ПО, просто недопустимо, иначе пропажа данных и меня на британский флаг ... это... самое .. )))

                Почему может зависнуть или упасть?

                Как я уже писал мое ПО: 1. Каждому клиенту приславшему строку 'data' или 'init' выдать данные, данных может быть до 500, а таких клиентов может быть до 100, причем может случиться так, что одновременно все 100 клиентов пришлют запросы! Вот тут то и будет момент истины и мое ПО должно выйти из этого положения с честью!

                Вопрос: К быстро создать XML документ, одного из ниже приведенных типов:
                по команде 'Init':
                ExpandedWrap disabled
                  <?xml version="1.0" encoding="utf-8"?>
                  <init>
                    <parameter id="" name=""/>
                  </init>

                по команде 'Data':
                ExpandedWrap disabled
                  <data FormatTimestamp="yyyy-mm-dd hh:nn:ss">
                    <Parameter id="" timestamp="" value="" state=""/>
                  </data>


                :)
                Сообщение отредактировано: EvilsInterrupt -
                  Цитата malor @
                  Project C:\Program Files\Borland\Delphi7\Projects\XMLproga\MyXML.exe raised too many consecutive exceptions:
                  'access violation at 0x00000000: read of address 0x00000000'. Process Stopped. Use Step or Run to continue.
                  ---------------------------
                  OK Help
                  ---------------------------

                  у меня аналогичная проблема,имеется проект под Delphi 2009, ранее всё работало, однако переустановил ОС, и поставил новый Delphi 2009. В коде ничего не менялось с тех пор, как в последний раз работало. Теперь при работе выскакивает сообщение
                  raised too many consecutive exceptions...access violation
                  Обнаружил источник
                  Имеется класс TRecordset, работающий с базой данных, в одном методе MapFields заполняется словарь имён параметров, передаваемых базе

                  ExpandedWrap disabled
                    procedure TRecordset.MapFields;
                    var
                    i: integer;
                    str : string;
                     begin
                     FieldMap.Clear;
                    if VarIsEmpty(FDataset) then exit;
                    for I := 0 to FDataset.Fields.Count - 1 do
                    begin
                    str := VarToStr(Fields(I).Name);
                    FieldMap.Add(str, I); //**********
                    end;
                    end;


                  где FieldMap: TDictionary<string,integer>; FDataset: OleVariant;
                  класс создаётся обычно
                  TRecordset.Create
                  проблема в том, что если класс использовать вторично, т.е. не высвободить после однократного обращения к базе, то возникает эта ошибка(на строке отмеченой //**********), если же сделать TRecordset.Free, а потом снова TRecordset.Create и сделать запрос, то проблемы нет и всё отрабатывает успешно. Но дело в том, что ранее не надо было высвобождать его, а посылать несколько запросов, пользуясь одним экземпляром. Параметры str и I адекватные. Так у меня по всей программе, не хочется переписывать, да и это будет неправильно. Подскажите, в чем может быть проблема, как докопаться, что не нравится классу справочника FieldMap ?
                    Юзаю для своих проектов SimpleXML, который здорово допилил в плане юникода, поддержки кодировок, оптимизации и прочего. Построен на интерфейсах, что вначале непривычно, зато не нужно освобождать объекты.
                    0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                    0 пользователей:
                    Страницы: (3) 1 2 [3]  все


                    Рейтинг@Mail.ru
                    [ Script execution time: 0,0303 ]   [ 16 queries used ]   [ Generated: 4.05.24, 07:24 GMT ]