<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Форум компьютерной помощи &mdash; СРАВНЕНИЕ СРЕДСТВ УПРАВЛЕНИЯ ДАННЫМИ В NETWARE]]></title>
	<link rel="self" href="http://itpmr.ru/extern.php?action=feed&amp;tid=533&amp;type=atom" />
	<updated>2011-12-06T21:28:39Z</updated>
	<generator>PunBB</generator>
	<id>http://itpmr.ru/viewtopic.php?id=533</id>
		<entry>
			<title type="html"><![CDATA[Re: СРАВНЕНИЕ СРЕДСТВ УПРАВЛЕНИЯ ДАННЫМИ В NETWARE]]></title>
			<link rel="alternate" href="http://itpmr.ru/viewtopic.php?pid=15455#p15455" />
			<content type="html"><![CDATA[<div class="codebox"><pre><code>if(status = PXDateEncode ( Sdate.month, Sdate.day,
                   Sdate.year, &amp;Px_date ))
                        {
                          printf (&quot;\n Error DateEncode_upd %d&quot;, status);
                          return(-1);
                        }

                       if (status = PXPutDate( recHandle, fld_dat, Px_date ))
                       {
                          printf (&quot;\n Error PutDate_upd %d&quot;, status);
                          return(-1);
                       }

                       if (status = PXPutAlpha( recHandle, fld_tim, Stime ))
                       {
                          printf (&quot;\n Error PutTime_upd %d&quot;, status);
                          return(-1);
                       }

                       if (status = PXRecUpdate(tblHandle, recHandle ))
                       {
                          printf (&quot;\n Error Update %d&quot;, status);
                          return(-1);
                       }
                      } /* for */
                    return(0);
                   } /* upd_records */

                   int tim_dif()             /* Time for Records Processing */
                     {
                      register num;

                      printf(&quot;\n Elapsed time - %f sec..&quot;, difftime(finish,
                   start));
                      printf(&quot;\n Average time for one record is %f sec..&quot;,
                   difftime(finish, start)/ RecNmb);
                     }

               
               
                                        -22-

                      *:***************************************************
                      *:        Program: Fox_io.prg
                      *:
                      *:         System: Informix
                      *:         Author: Goryachkina
                      *:      Copyright (c) 1990, Goryachkina
                      *:  Last modified: 09/06/90     14:33
                      *:
                      *:           Uses: F:\ZIMIN\BAZA.DBF
                      *:
                      *:        Indexes: F:\ZIMIN\BAZAI.NDX
                      *:               : F:\ZIMIN\BAZAI2.NDX
                      *:
                      *: Documented: 09/06/90 at 14:37     FoxDoc version 1.0
                      *:*****************************************************




                        CLEAR ALL
                        SET ECHO OFF
                        SET TALK OFF
                        SET SAFE OFF
                        SET CONF ON
                        SET STATUS OFF
                        SET SCOREBOARD OFF
                        SET PRINT ON
                        rec=1000
                        DO WHILE rec&lt;=10000

                           USE F:\zimin\baza
                           INDEX ON nomtyp TO F:\zimin\bazai
                           INDEX ON nomprc TO F:\zimin\bazai2
                           USE
                           USE F:\zimin\baza INDEX F:\zimin\bazai
                           zp=1
                           STORE TIME() TO ptime1
               
                           DO WHILE zp&lt;=rec
                              STORE TIME() TO ptime5
               
               
               
               
                                      -23-
               
                              APPEND Blank
                              REPLACE nomtyp WITH zp
                              REPLACE TIME WITH ptime5
                              zp=zp+1
                           ENDDO
                           USE F:\zimin\baza INDEX F:\zimin\bazai2
                           REINDEX
                           STORE TIME() TO ptime2
                           USE
                           USE F:\zimin\baza INDEX F:\zimin\bazai
                           N=0
                           STORE TIME() TO ptime3
                           DO WHILE N&lt;(rec/2)
                              IF N=(rec/2)
                                 EXIT
                              ENDIF
                              SEEK (rec-N)
                              STORE TIME() TO ptime6
                              REPLACE TIME WITH ptime6
                              N=N+1
                              SEEK N
                              STORE TIME() TO ptime7
                              REPLACE TIME WITH ptime7
                           ENDDO

                           USE F:\zimin\baza INDEX F:\zimin\bazai2
                           REINDEX
                           STORE TIME() TO ptime4
                           USE
                           &amp;&amp;? ptime1,ptime2,ptime3,ptime4
                           @ 1,0 SAY &#039;Number of Records &#039;
                           @ 1,27 SAY rec
                           @ 2,0 SAY &#039; Start Time of Inserting &#039;
                           @ 2,29 SAY ptime1
                           @ 3,0 SAY &#039;Finish Time of Inserting &#039;
                           @ 3,29 SAY ptime2
                           @ 4,0 SAY &#039;Start Time of Updating &#039;
                           @ 4,29 SAY ptime3
                           @ 5,0 SAY &#039;Finish Time of Updating &#039;
                           @ 5,29 SAY ptime4
               
                           USE F:\zimin\baza INDEX F:\zimin\bazai
                           ZAP
              
               
                           USE F:\zimin\baza INDEX F:\zimin\bazai2
                           ZAP
                           rec=rec+1000
                        ENDDO
                        *: EOF: FOX_IO.PRG</code></pre></div><br /><br /><br /><div class="codebox"><pre><code>                   #include &lt;stdlib.h&gt;
                   #include &lt;stdio.h&gt;
                   #include &lt;memory.h&gt;
                   #include &lt;string.h&gt;
                   #include &lt;malloc.h&gt;
                   #include &lt;sys\types.h&gt;
                   #include &lt;sys\stat.h&gt;
                   #include &lt;dos.h&gt;
                   #include &lt;time.h&gt;

                   #define B_OPEN          0       /* Btrieve Operations */
                   #define B_CLOSE         1
                   #define B_INSERT        2
                   #define B_UPDATE        3
                   #define B_DELETE        4
                   #define B_GETEQUAL      5
                   #define B_GETNEXT       6
                   #define B_GETFRST       12
                   #define B_GETLAST       13
                   #define B_CREATE        14
                   #define B_BTRANS        19
                   #define B_BT_SWL        119
                   #define B_ETRANS        20
                   #define B_ATRANS        21
                   #define B_GE_SWL        105

                   #define ACSNMB          100

                   #define LenKey          2      /* Fields Lengths */
                   #define LenStn          2

                                          -26-

                   int   StnNmb = 0 ; /* Station Number. first number - &quot;0&quot; */
                   int   adr;
                   int   RecNmb;
                   int   Recrds[10];

                   char  BlkDir[128];
                   int   BReclen;
                   int   Status;

                   struct stat      Fl_Inf;
                   struct dosdate_t Sdate;
                   struct dostime_t Stime;

                   time_t  start, finish;

                   char  * FileDir = &quot;shar_rec.dta&quot;;      /* File Path */


                   char * Str;
                   char * Key;                      /* Љ«оз § ЇЁбЁ */
                   char * St1;            /* Џ®«п ®Ўа Ў®вЄЁ бв жЁЁ 1 - 8 */
                   char * St2;
                   char * St3;
                   char * St4;
                   char * St5;
                   char * St6;
                   char * St7;
                   char * St8;


                   struct stat buf;

                   int _cdecl  new_dirfile(void);
                   int _cdecl  opn_dirfile(void);
                   int _cdecl  cls_dirfile(void);
                   int _cdecl  new_records(void);
                   int _cdecl  upd_records(void);
                   int _cdecl  cur_time(void);
                   int _cdecl  beg_trans(void);
                   int _cdecl  end_trans(void);
               
                   int _cdecl  abt_trans(void);
                   int _cdecl  rand_key(int St);
               
                                         -27-

                   main(argc, argv)
                      int argc;
                      char *argv[];
                    {

                    extern int BRecLen;

                    Str = Key = calloc(LenKey + 16, 1);

                    St1 = Key + LenKey;
                    St2 = St1 + LenStn;
                    St3 = St2 + LenStn;
                    St4 = St3 + LenStn;
                    St5 = St4 + LenStn;
                    St6 = St5 + LenStn;
                    St7 = St6 + LenStn;
                    St8 = St7 + LenStn;

                    BRecLen = LenKey + 16;

                      if(strcmp(argv[1], &quot;1&quot;) == 0) { StnNmb = 0; adr = 0; }
                      if(strcmp(argv[1], &quot;2&quot;) == 0) { StnNmb = 1; adr = 2; }
                      if(strcmp(argv[1], &quot;3&quot;) == 0) { StnNmb = 2; adr = 4; }
                      if(strcmp(argv[1], &quot;4&quot;) == 0) { StnNmb = 3; adr = 6; }
                      if(strcmp(argv[1], &quot;5&quot;) == 0) { StnNmb = 4; adr = 8; }
                      if(strcmp(argv[1], &quot;6&quot;) == 0) { StnNmb = 5; adr = 10; }
                      if(strcmp(argv[1], &quot;7&quot;) == 0) { StnNmb = 6; adr = 12; }
                      if(strcmp(argv[1], &quot;8&quot;) == 0) { StnNmb = 7; adr = 14; }
                         /* „«Ё  § ЇЁбЁ */
                       printf(&quot;\n StnNmb = %d, adr = %d&quot;, StnNmb, adr);

                       printf(&quot;\n Programm START&quot;);

                       if(stat(FileDir, &amp;buf))
                         {
                          printf(&quot;\n File wasn&#039;t Created. &quot;);
                          return(0);     }
                          else
               
                         {
                          printf(&quot;\n File Opening. &quot;);
                          opn_dirfile();       /* ЋвЄалвЁҐ д ©«  */
                         } /* if - else */
               
                                           -28-

                   printf(&quot;\Ќ ¦¬ЁвҐ Є« ўЁиг&quot;); getch();
                   printf(&quot;\n Records Updating. &quot;);

                       time(&amp;start);

                        upd_records();

                       time(&amp;finish);
                       tim_dif();

                       if( cls_dirfile()) return(-1);

                    exit(0);

                   } /* main */

                   int opn_dirfile()   /* Fille Opening  */
                   {
                    extern int BRecLen;

                    Status = BTRV( B_OPEN, BlkDir, Str, &amp;BRecLen, FileDir, 0 );

                    if(Status != 0)
                      {
                       printf(&quot;\nB_OPN Status is %d.&quot;,Status);
                       return(-1);

                      }
                   return(0); } /* opn_dirfile */

                   int cls_dirfile( void )   /* File Closing  */
                   {
                    extern int BRecLen;

                    Status = BTRV( B_CLOSE, BlkDir, NULL, &amp;BRecLen, NULL, 0 );
                    if(Status != 0)
                      {
                       printf(&quot;\nB_CLS Status is %d.&quot;,Status);
                       return(-1);
                      }
                    return(0);

                   } /* cls_dirfile */
               
                                        -29-

                   int upd_records()         /* Read Updating */
                   {
                    extern int BRecLen;

                    int KeyVal = 13;
                    int AcsVal = 1;

                    do
                      {
                       memmove(Key, &amp;KeyVal, LenKey);

                       Status = BTRV(B_GE_SWL, BlkDir, Str, &amp;BRecLen, Key, 0);

               if(Status != 0) /* Record wasn&#039;t Found */
                         {
                          printf(&quot;\nB_GE_SWL Status is %d.&quot;,Status);
                     /* Reading Error */
                          cls_dirfile();
                          return (-1);   }

                       memmove(&amp;AcsVal, St1 + adr, LenStn);

                        AcsVal ++;

                       if (AcsVal &gt; ACSNMB) return (ACSNMB);

                       memmove(St1 + adr, &amp;AcsVal, LenStn);

               if( Status = BTRV(B_UPDATE, BlkDir, Str,  &amp;BRecLen,  Key,
          0))
               {
                          printf(&quot;\nB_UPDATE Status is %d.&quot;,Status);
                     /* Reading Error */
                          cls_dirfile();
                          return (-1);    }
                       } while(1);
                          return(0);      }
                     /* upd_records */

                   int tim_dif()             /* Time for Records Processing */
                     {
                      register num;
               
               
                                         -30-

                      printf(&quot;\n Elapsed time - %f sec..&quot;, difftime(finish,
                   start));
                      printf(&quot;\n Average time for one record is %f sec..&quot;,
                   difftime(finish, start)/ ACSNMB);

                     }

                   int beg_trans( void )   /* Begin Transaction  */
                   {
                    extern int BRecLen;

                    Status = BTRV( B_BT_SWL, BlkDir, NULL, &amp;BRecLen, NULL, 0 );
                    if(Status != 0)
                      {
                       printf(&quot;\nB_BTRANS Status is %d.&quot;,Status);
                       return(-1);    }
                       return(0);     }
                   /* beg_trans */

                   int end_trans( void )   /* End Transaction  */
                   {
                    extern int BRecLen;

                    Status = BTRV( B_ETRANS, BlkDir, NULL, &amp;BRecLen, NULL, 0 );
                    if(Status != 0)
                      {
                       printf(&quot;\nB_ETRANS Status is %d.&quot;,Status);
                       return(-1);   }
                       return(0);      }
                   /* end_trans */

                   int abt_trans( void )   /* Abort Transaction  */
                   {
                    extern int BRecLen;

                    Status = BTRV( B_ATRANS, BlkDir, NULL, &amp;BRecLen, NULL, 0 );
                    if(Status != 0)
                      {
                       printf(&quot;\nB_ATRANS Status is %d.&quot;,Status);
                       return(-1);   }
                       return(0);   }
                   /* end_trans */</code></pre></div>]]></content>
			<author>
				<name><![CDATA[admin]]></name>
				<uri>http://itpmr.ru/profile.php?id=2</uri>
			</author>
			<updated>2011-12-06T21:28:39Z</updated>
			<id>http://itpmr.ru/viewtopic.php?pid=15455#p15455</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[СРАВНЕНИЕ СРЕДСТВ УПРАВЛЕНИЯ ДАННЫМИ В NETWARE]]></title>
			<link rel="alternate" href="http://itpmr.ru/viewtopic.php?pid=15454#p15454" />
			<content type="html"><![CDATA[<p>ПРАКТИЧЕСКОЕ СРАВНЕНИЕ РАЗЛИЧНЫХ СРЕДСТВ УПРАВЛЕНИЯ ДАННЫМИ В СРЕДЕ СЕТЕВОЙ ОПЕРАЦИОННОЙ СИСТЕМЫ NETWARE ФИРМЫ NOVELL</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;В материале приведены практические&nbsp; результаты&nbsp; сравнения<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; различных популярных средств управления данными в информацион-<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ных системах в среде сетевой ОС NetWare фирмы Novell.</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Основной смысл документа, на наш взгляд,&nbsp; заключен&nbsp; в ин-<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; формации позволяющей пользователю, в зависимости&nbsp; от&nbsp; его пот-<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ребностей и располагаемых ресурсов, выбрать&nbsp; средство&nbsp; для уп-<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; равления данными в его компьютерной системе.</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Документ предназначен для лиц, имеющих&nbsp; злементарные зна-<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ния в области управления данными в вычислительных системах.</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Зимин Владимир Валерьевич является&nbsp; ведущим конструктором<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; НПО &quot;Информатика&quot; г. Иваново. Занимается проектированием и ре-<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ализацией информационных и планирующих систем для промышленных<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; предприятий разной специализации.</p><br /><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;СОДЕРЖАНИЕ</p><br /><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ВВЕДЕНИЕ ..............................................4</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1. ПРАКТИЧЕСКОЕ СРАВНЕНИЕ СУБД.........................5</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ВЫВОДЫ И ЗАМЕЧАНИЯ....................................40</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; СПИСОК ЛИТЕРАТУРЫ.....................................41</p><br /><br /><br /><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ПЕРЕЧЕНЬ РИСУНКОВ</p><br /><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Рисунок 1.1.&nbsp; Сравнительные характеристики<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Paradox Engine, Btrieve и FoxBASE по добавлению<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; записей на одиночном компьютере.</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Рисунок 1.2. Сравнительные характеристики<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Paradox Engine, Btrieve и FoxBASE по обновлению<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; записей на одиночном компьютере.</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Рисунок 1.3. Сравнительные характеристики Btrieve<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; и Clipper по доступу к разделяемым данным на сети<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;с числом рабочих станций до 8 шт.</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Рисунок 1.4. Характеристики Paradox Engine<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; при разделении данных.</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Рисунки 1.5&nbsp; Характеристики Btrieve при разделении<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; данных.</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Рисунок 1.6 Характеристики Btrieve и FoxPro<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; при поиске данных в &quot;больших&quot; таблицаx.</p><br /><br /><p>ВВЕДЕНИЕ</p><br /><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Этот материал&nbsp; представляет&nbsp; собой&nbsp; отчет&nbsp; о&nbsp; проведенных<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; экспериментах по сравнению различных средств управления данны-<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ми в сетевой среде фирмы Novell.</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1. ПРАКТИЧЕСКОЕ СРАВНЕНИЕ СУБД.</p><br /><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Для&nbsp; сравнения&nbsp; Btrieve,&nbsp; Paradox_Engine&nbsp; и&nbsp; FoxBASE&nbsp; &nbsp;по<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; функциям, нами были программы, добавления и обновления записей<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; в базе данных: Btr_io.c, PxE_io.c, Fox_io.prg и программы раз-<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; деления записи данных в сети Novell: Btr_sh_rec.c, PxE_sh_rec.<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; c, Clp_sh_rec.prg.</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Укрупненно, алгоритм программ первого типа можно предста-<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; вить следующими шагами:</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1) Создание таблиц(ы) данных и индексных файлов;</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2) Добавление (1000, 2000,... 10000)&nbsp; записей&nbsp; в&nbsp; таблицы<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; данных с фиксацией времени добавления всех;</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;3) Обновление неключевых полей (1000, 2000,... 10000) за-<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; писей с фиксацией времени обновления всех.</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 4) Удаление индексных файлов и таблиц данных.</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Тестовые прогоны проводились на&nbsp; компьютере&nbsp; ASI-386SX&nbsp; с<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; объемом ОЗУ 1 MB и тактовой частотой 16 MHz.</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Исходные коды программ Btr_io.c,&nbsp; PxE_io.c&nbsp; и&nbsp; Fox_io.prg<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; приведены ниже.</p><br /><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/*<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Ъ————————————————————————————————————————————————ї<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;і Тестовая программа добавления и обновления&nbsp; &nbsp; &nbsp;і<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;і&nbsp; &nbsp; &nbsp; записей - Btr_io.c.&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;і<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;А——————————————— File BTR_IO.C ——————————————————Щ<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;*/</p><br /><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </p><div class="codebox"><pre><code> #include &lt;stdlib.h&gt;
                 #include &lt;stdio.h&gt;
                 #include &lt;malloc.h&gt;
                 #include &lt;sys\types.h&gt;
                 #include &lt;sys\stat.h&gt;
                 #include &lt;dos.h&gt;
                 #include &lt;time.h&gt;

                 #define B_OPEN          0  /* Btrieve Operations */
                 #define B_CLOSE         1
                 #define B_INSERT        2
                 #define B_UPDATE        3
                 #define B_DELETE        4
                 #define B_GETEQUAL      5
                 #define B_GETNEXT       6
                 #define B_GETFRST       12
                 #define B_GETLAST       13
                 #define B_CREATE        14

                 #define LenIdn          22    /* Fields Lengths */
                 #define LenNam          20
                 #define LenKey          2
                 #define LenWkl          38
                 #define LenPrt          39
                 #define LenDat          4
                 #define LenTim          4

                 int   RecNmb;
                 int   Recrds[10];

                 char  BlkDir[128];
                 int   BReclen;
                 int   Status;

                 struct stat      Fl_Inf;
                 struct dosdate_t Sdate;
                 struct dostime_t Stime;

                 time_t  start, finish;

                 /* File Path */
                 /* char  * FileDir = &quot;f:\\zimin\\btr_tst.dta&quot;;
                 char  * FileDir = &quot;c:\\owrwrk\\btr_tst.dta&quot;;


                 char * StrDir;            /* File Structure */
                 char * IdnDir;            /* Subject ID */
                 char * DatDir;            /* Date */
                 char * TimDir;            /* Time */
                 char * NamDir;
                 char * KeyDir;
                 char * WklDir;
                 char * PrtDir;

                 int    Key;
                 char * Idn;


                 struct stat buf;

                 int _CDECL  new_dirfile(void);
                 int _CDECL  opn_dirfile(void);
                 int _CDECL  cls_dirfile(void);
                 int _CDECL  new_records(void);
                 int _CDECL  upd_records(void);
                 int _CDECL  cur_time(void);


                 main ()
                 {
                  extern int BRecLen;
                  int i;
               
               StrDir = IdnDir =  calloc(LenIdn  +  LenNam  +  LenKey  +
          LenWkl + LenPrt+ LenDat + LenTim, 1);

                  NamDir = IdnDir + LenIdn;
                  KeyDir = NamDir + LenNam;
                  WklDir = KeyDir + LenKey;
                  PrtDir = WklDir + LenWkl;
                  DatDir = PrtDir + LenPrt;
                  TimDir = DatDir + LenDat;


                  Idn = calloc(LenIdn, 1);

               BRecLen = LenIdn + LenNam + LenKey + LenWkl  +  LenPrt  +
          LenDat + LenTim; /* Rec. Len. */

                  Recrds[0] = 1000;
                  Recrds[1] = 2000;wc
                  Recrds[2] = 3000;
                  Recrds[3] = 4000;
                         Recrds[4] = 5000;
                  Recrds[5] = 6000;
                  Recrds[6] = 7000;
                  Recrds[7] = 8000;
                  Recrds[8] = 9000;
                  Recrds[9] = 10000;

                  for ( i = 0; i &lt;= 9 ; i++ )
                           {
                 ЖЖRecNmb = Recrds[i];

                 ЖЖprintf(&quot;\n\n\n Records Number is %d.&quot;, RecNmb);

                 ЖЖprintf(&quot;\n Programm START&quot;);

                 ЖЖif(stat(FileDir, &amp;buf))
                 ЖЖЖ{
                 ЖЖЖ printf(&quot;\n File Creating. &quot;);
                 ЖЖЖ new_dirfile();       /* File Crt */
                 ЖЖЖ} else

                 ЖЖЖ{
                 ЖЖЖ printf(&quot;\n File Opening. &quot;);
                 ЖЖЖ opn_dirfile();       /* File Opn */
                 ЖЖЖ} /* if - else */

                 ЖЖprintf(&quot;\n Records Inserting. &quot;);

                 ЖЖtime(&amp;start);

                 ЖЖif( new_records()) return(-1);

                 ЖЖtime(&amp;finish);
                 ЖЖtim_dif();

                 ЖЖprintf(&quot;\n Records Updating. &quot;);

                 ЖЖtime(&amp;start);

                 ЖЖif( upd_records()) return(-1);


                 ЖЖtime(&amp;finish);
                 ЖЖtim_dif();

                 ЖЖif( cls_dirfile()) return(-1);

                 Ж } /* for */


                  exit(0);

                 } /* main */

                 int new_dirfile()        /* File Creating */
                 {
                  int     length;

                  extern int BRecLen;

                  struct  KEY_SPEC
                 ЖЖ{
                 ЖЖ int     KeyPos, KeyLen, KeyFlag;
                 ЖЖ char    Notuse2 [4];
                 ЖЖ char    KeyType;
                 ЖЖ char    NullValue;
                 ЖЖ char    Reserv2 [4];
                 ЖЖ};


               struct FILE_SPEC
               {
               int RecLen, PageSize, NumIndex;
               char Notuse1 [4];
               int FileFlag;
               char Reserv1 [2];
               int PreAlloc;
               struct KEY_SPEC KeyBuf[2];
               } Filedef;
               
               Filedef.RecLen = LenIdn + LenNam + LenKey + LenWkl +
               LenPrt + LenDat + LenTim; /* Rec. Len. */
               
               Filedef.PageSize = 4096;
               Filedef.NumIndex = 2; /* Nmb of Keys */
               Filedef.FileFlag = 4; /* Emp Pages */
               Filedef.PreAlloc = 520; /* Nmb of Prealloc. Pgs */
               memset( Filedef.Notuse1, 0, 4 );
               memset( Filedef.Reserv1, 0, 2 );

               Filedef.KeyBuf[0].KeyPos = 1; /* Key Pos. */
               Filedef.KeyBuf[0].KeyLen = LenIdn; /* Key Len. */
               Filedef.KeyBuf[0].KeyFlag = 0;
               Filedef.KeyBuf[0].KeyType = 0;/* Key Type-String */
               Filedef.KeyBuf[0].NullValue = 0;
               memset( Filedef.KeyBuf[0].Notuse2, 0, 4 );
               memset( Filedef.KeyBuf[0].Reserv2, 0, 4 );
               
               Filedef.KeyBuf[1].KeyPos = LenIdn + LenNam + 1;
               /* Key Pos. */
               
               
               Filedef.KeyBuf[1].KeyLen = LenKey; /* Key Len. */
               Filedef.KeyBuf[1].KeyFlag = 0;
               Filedef.KeyBuf[1].KeyType = 1; /*Key Type-Integer */
               Filedef.KeyBuf[1].NullValue = 0;
               memset( Filedef.KeyBuf[1].Notuse2, 0, 4 );
               memset( Filedef.KeyBuf[1].Reserv2, 0, 4 );
               
               
               length = sizeof( Filedef );
               
               if( Status = BTRV( B_CREATE, BlkDir, &amp;Filedef, &amp;length,
               FileDir, 0 ))
               {
               printf(&quot;\nB_CRT Status is %d.&quot;,Status);
               return(-1);
               }
               
               
               
               if( Status = BTRV( B_OPEN, BlkDir, StrDir, &amp;BRecLen,
               FileDir, -1 ) )
               {
               printf(&quot;\nB_OPN Status is %d.&quot;,Status);
               return(-1);
               }
               return (0);
               } /* new_dirfile */
               
               int opn_dirfile() /* Fille Opening */
               {
               extern int BRecLen;
               
               Status = BTRV( B_OPEN, BlkDir, StrDir, &amp;BRecLen, FileDir,
          -1 );
               
               if(Status != 0)
               {
               printf(&quot;\nB_OPN Status is %d.&quot;,Status);
               return(-1);
               }
               return(0); } /* opn_dirfile */


               
               int cls_dirfile( void ) /* File Closing */
               {
               extern int BRecLen;


               Status = BTRV( B_CLOSE, BlkDir, NULL, &amp;BRecLen, NULL, 0);
               if(Status != 0)


               {
               printf(&quot;\nB_CLS Status is %d.&quot;,Status);
               return(-1); }
               
               remove(FileDir);
               
               return(0); } /* cls_dirfile */

               int new_records() /* Record Inserting */
               {
               extern int BRecLen;

               extern int Key = 1;
               extern int BRecLen;
               int i;
               int radix = 10;
               char *p;
               
               for ( i = 1; i &lt;= RecNmb ; i ++ )
               {
               memmove(KeyDir, &amp;Key, LenKey);
               
               memset(Idn, &#039; &#039;, LenIdn);
               memset(IdnDir, &#039; &#039;, LenIdn);
               
               p = itoa(Key, IdnDir, radix);
               
               memmove(Idn, IdnDir, strlen(IdnDir));
               memset(IdnDir + strlen(IdnDir), &#039; &#039;, 1);
               
               _dos_getdate (&amp;Sdate); /* System Date to Buffer */
               _dos_gettime (&amp;Stime); /* System Time to Buffer */
               
               
               memmove(DatDir, &amp;Sdate.day, LenDat);
               memmove(TimDir, &amp;Stime.hour, LenTim);
               
               Status = BTRV(B_INSERT, BlkDir, StrDir, &amp;BRecLen,
               Idn, 0);
               
               if( Status != 0)
               {
               printf(&quot;\n Error inserting %d.&quot;,Status);
               cls_dirfile();
               return (-1);
               } /* if */
               Key ++;
               } /* for */
               return(0);   }        /* new_records */
               
               int upd_records() /* Rec. Updating */
               { 
               extern int BRecLen;
               int radix = 10;
               char *p;

               for ( Key = 1; Key &lt;= RecNmb ; Key++ )
               {
               memmove(KeyDir, &amp;Key, LenKey); 
               memset(IdnDir, &#039; &#039;, LenIdn);
               p = itoa(Key, IdnDir, radix); 
               memset(IdnDir + strlen(IdnDir), &#039; &#039;, 1);
               
               memmove(Idn, IdnDir, LenIdn);
               
               Status = BTRV(B_GETEQUAL, BlkDir, StrDir, &amp;BRecLen,
               Idn, 0);
               
               if(Status != 0) /* Record wasn&#039;t Found */
               { printf(&quot;\nB_GEQ Status is %d.&quot;,Status);
                 ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ/* Reading Error
               */ cls_dirfile();
               return (-1); }

               _dos_getdate  (&amp;Sdate); /*  System  Date   to   Buffer */
          _dos_gettime (&amp;Stime); /* System Time to
               Buffer */

               
               memmove(DatDir, &amp;Sdate.day, LenDat);
               memmove(TimDir, &amp;Stime.hour, LenTim);
               
               if( Status =  BTRV(B_UPDATE,  BlkDir,  StrDir,  &amp;BRecLen,
          Idn, 0))
               { printf(&quot;\nB_UPDATE Status is  %d.&quot;,Status); /*  Reading
          Error */
               cls_dirfile();
               return (-1); } } /* for */ return(0);
               } /* upd_records */
               int tim_dif() /* Time for Records
               Processing */ { register num;
               printf(&quot;\n Elapsed time - %f sec..&quot;,
               difftime(finish, start));
               printf(&quot;\n Average time for one record is %f sec..&quot;,
               difftime(finish, start)/ RecNmb); }</code></pre></div><br /><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; /*<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Ъ—————————————————————————————————————————————————————ї<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; і&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;і<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; і Программа - тест&nbsp; добавления, поиска - обновления&nbsp; &nbsp;і<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; і&nbsp; &nbsp; системы управления данными Paradox Engine v2.0&nbsp; &nbsp;і<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; і&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;і<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; А—————&nbsp; Файл PxE_io.c&nbsp; ———————————————————————————————Щ<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; */</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</p><div class="codebox"><pre><code> #include &lt;stdlib.h&gt;
            #include &lt;stdio.h&gt;
            #include &lt;malloc.h&gt;
            #include &lt;sys\types.h&gt;
            #include &lt;sys\stat.h&gt;
            #include &lt;dos.h&gt;
            #include &lt;time.h&gt;
            #include &lt;pxengine.h&gt;

            #define  SUCCESS        0
            #define  MAXFIELDS      7
            #define  MAXFIELDSIZE   55

            #define ACSNMB          100

               
             
            RECORDHANDLE recHandle;    /* record buffer */
            TABLEHANDLE  tblHandle;    /* table handle  */
            FIELDHANDLE fld_key,
            ЖЖЖЖЖЖfld_idn,
            ЖЖЖЖЖЖfld_nam,
            ЖЖЖЖЖЖfld_wkl,
            ЖЖЖЖЖЖfld_prt,
            ЖЖЖЖЖЖfld_dat,
            ЖЖЖЖЖЖfld_tim;


            int  TableIsOpen = FALSE;  /* table is open */
            int  nfields;              /* number of fields */

            char  * FileDir = &quot;px_tst&quot;;      /* File Path */


               char * FieldNames[] = /* Field names
            of PARADOX table */
            {
             &quot;Key&quot;,
             &quot;Idn&quot;,
             &quot;Nam&quot;,
             &quot;Wkl&quot;,
             &quot;Prt&quot;,
             &quot;Dat&quot;,
             &quot;Tim&quot;
            };

               /* Field types of PARADOX table */

               char * FieldTypes[] =
               {
               &quot;N&quot;, &quot;A22&quot;,&quot;A20&quot; , &quot;A38&quot;, &quot;A39&quot;, &quot;D&quot;, &quot;A11&quot;
               };
               
               #define NBRFIELDS ( sizeof(FieldNames) / sizeof(*char) )
               
               struct dosdate_t Sdate;
               char Stime[9];
               
               time_t start, finish;

               
               char * Str;
               char * Key; /* Ключ записи */
               char * St1; /* Поля обработки станции 1
               - 8 */
               char * St2;
               char * St3;
               char * St4;
               char * St5;
               char * St6;
               char * St7;
               char * St8;
               
               int Key = 1;
               char Idn[23];
               int LenIdn = 22;
               int Recrds[5];
               int RecNmb ;
               int status;
               
               
               int new_dirfile(void);
               int init_flds(void);
               int cls_dirfile(void);
               int new_records(void);
               int upd_records(void);
               int cur_time(void);
               
               main ()
               {
               int i;
               
               /* Initializa the Engine */
               
               if ( status = PXInit())
               {
               printf ( &quot;\n Error Init\n&quot; );
               exit(1);
               }
               
             Recrds[0] = 1000;
             Recrds[1] = 2000;
             Recrds[2] = 3000;
             Recrds[3] = 4000;
             Recrds[4] = 5000;
            /* Recrds[5] = 6000;
             Recrds[6] = 7000;
             Recrds[7] = 8000;
             Recrds[8] = 9000;
             Recrds[9] = 10000;*/

             for ( i = 0; i &lt;= 4 ; i++ )
            Ж {
            ЖЖЖRecNmb = Recrds[i];

               printf(&quot;\n\n\n Records Number is %d.&quot;, RecNmb);
               printf(&quot;\n Programm START&quot;);

               printf(&quot;\n File Creating. &quot;);
               if (new_dirfile()) exit(-1); /* Создание файла */
               if (init_flds()) exit(-1);
               
               printf(&quot;\n Records Inserting. &quot;);
               
               time(&amp;start);
               
               if( new_records())
               {
               PXExit();
               exit(-1);
               }
               
               time(&amp;finish);
               tim_dif();
               
               printf(&quot;\n Records Updating. &quot;);
               
               time(&amp;start);
               
               if( upd_records())
               {
               end_prg();
               exit(-1);
               }

               
               time(&amp;finish);
               tim_dif();
               
               if( cls_dirfile()) exit(-1);
               
               } /* for */
               
               PXExit();

             exit(0);

            } /* main */


            new_dirfile()        /* File Creating */
            {

             FIELDHANDLE keybuf[7];

             if (status = PXTblCreate ( FileDir, 7, FieldNames,
            FieldTypes ))
             {
            Ж printf ( &quot;\n Error Create %d&quot;, status );
             return (FALSE);
             }

             keybuf[1] = 2;

             if (status = PXKeyAdd ( FileDir, 2, keybuf, PRIMARY ))
             {
            Ж printf ( &quot;\n Error ADD 2 %d&quot;, status );
            Ж return (FALSE);
             }

             if (status = PXTblOpen( FileDir, &amp;tblHandle, 0, 0 ))
             {
            Ж printf ( &quot;\n Error Open %d&quot;, status );
            Ж return (FALSE);
             }

            return (0);
            }  /* new_dirfile */

               
            int cls_dirfile()        /* File Closing */
            {

             PXRecBufClose (recHandle);

             if ( status = PXTblClose (tblHandle))
             {
            Ж printf ( &quot;\n Error Close %d&quot;, status );
            Ж return (FALSE);
             }

             remove(FileDir);

            return (0);
            }
            int init_flds()
            {

             if ( status = PXFldHandle (tblHandle, &quot;Idn&quot;,  &amp;fld_idn))
             {
            Ж printf ( &quot;\n Error Init 1 %d&quot;, status );
             return (FALSE);
             }

             if ( status = PXFldHandle (tblHandle, &quot;Key&quot;, &amp;fld_key))
             {
            Ж printf ( &quot;\n Error Init 2 %d&quot;, status );
             return (FALSE);
             }
             if ( status = PXFldHandle (tblHandle, &quot;Nam&quot;, &amp;fld_nam))
             {
            Ж printf ( &quot;\n Error Init 3 %d&quot;, status );
             return (FALSE);
             }
             if ( status = PXFldHandle (tblHandle, &quot;Wkl&quot;, &amp;fld_wkl))
             {
            Ж printf ( &quot;\n Error Init 4 %d&quot;, status );
             return (FALSE);
             }
             if ( status = PXFldHandle (tblHandle, &quot;Prt&quot;, &amp;fld_prt))
             {
            Ж printf ( &quot;\n Error Init 5 %d&quot;, status );
             return (FALSE);
             }

               
             if ( status = PXFldHandle (tblHandle, &quot;Dat&quot;, &amp;fld_dat))
             {
            Ж printf ( &quot;\n Error Init 6 %d&quot;, status );
             return (FALSE);
             }
             if ( status = PXFldHandle (tblHandle, &quot;Tim&quot;, &amp;fld_tim))
             {
            Ж printf ( &quot;\n Error Init 7 %d&quot;, status );
             return (FALSE);
             }
            Жreturn (0); }

            int new_records()         /* Record Inserting */
            {
             int i;
             int radix = 10;
             char *p;
             DATE Px_date;

             Key = 1;

             status = PXRecBufOpen ( tblHandle, &amp;recHandle);
             if (status)
            Ж{
            ЖЖprintf (&quot;\n Error RecBufOpen %d&quot;, status);
            ЖЖreturn(-1);
            Ж}

             for ( i = 1; i &lt;= RecNmb ; i ++ )
            Ж {
            ЖЖmemset(Idn, &#039; &#039;, LenIdn);

            ЖЖp = itoa(Key, Idn, radix);

            ЖЖ_dos_getdate (&amp;Sdate);         /* System Date to Buffer
            */
            ЖЖ_strtime (Stime);              /* System Time to Buffer
            */
            ЖЖif(status = PXDateEncode ( Sdate.month, Sdate.day,
            Sdate.year, &amp;Px_date ))
            ЖЖ {
            ЖЖЖ printf (&quot;\n Error DateEncode %d&quot;, status);
            ЖЖЖ return(-1);
            ЖЖ }
               
            ЖЖif (status = PXPutAlpha( recHandle, fld_idn, Idn ))
            ЖЖ{
            ЖЖЖ printf (&quot;\n Error PutIdn %d&quot;, status);
            ЖЖЖ return(-1);  }

            ЖЖif (status = PXPutAlpha( recHandle, fld_tim, Stime ))
            ЖЖ{
            ЖЖЖ printf (&quot;\n Error PutTime %d&quot;, status);
            ЖЖЖ return(-1);  }

            ЖЖif (status = PXPutLong( recHandle, fld_key, (long)Key ))
            ЖЖ{
            ЖЖЖ printf (&quot;\n Error PutKey %d&quot;, status);
            ЖЖЖ return(-1);  }

            ЖЖif (status = PXPutDate( recHandle, fld_dat, Px_date ))
            ЖЖ{
            ЖЖЖ printf (&quot;\n Error PutDate %d&quot;, status);
            ЖЖЖ return(-1);  }

            ЖЖif (status = PXRecInsert( tblHandle, recHandle ))
            ЖЖ{
            ЖЖЖ printf (&quot;\n Error RecInsert %d&quot;, status);
            ЖЖЖ return(-1);   }

                       Key ++;

                   } /* for */
             return(0);
            } /* new_records */

            int upd_records()         /* Read Updating */
            {

             extern int BRecLen;
             int radix = 10;
             char *p;
             DATE Px_date;

               status = PXRecBufOpen ( tblHandle, &amp;recHandle);

               
               for ( Key = 1; Key &lt;= RecNmb ; Key++ )
               {
               
               memset(Idn, &#039; &#039;, LenIdn);
               
               p = itoa(Key, Idn, radix);
               if (status = PXPutLong( recHandle, fld_key, (long)Key ))
               {
               printf (&quot;\n Error PutKey %d&quot;, status);
               return(-1);    }
               
               if (status = PXPutAlpha( recHandle, fld_idn, Idn ))
               {
               printf (&quot;\n Error PutIdn %d&quot;, status);
               return(-1);    }
               
               if (status = PXSrchKey(tblHandle, recHandle, 1,
               SEARCHFIRST ))
               {
               printf (&quot;\n Error srchkey %d&quot;, status);
               return(-1);   }
               
               if (status = PXRecGet(tblHandle, recHandle ))
               {
               printf (&quot;\n Error Get %d&quot;, status);
               return(-1);   }
               
               _dos_getdate (&amp;Sdate); /* System Date to Buffer
               */
               _strtime (Stime); /* System Time to Buffer
               */</code></pre></div>]]></content>
			<author>
				<name><![CDATA[admin]]></name>
				<uri>http://itpmr.ru/profile.php?id=2</uri>
			</author>
			<updated>2011-12-06T21:28:02Z</updated>
			<id>http://itpmr.ru/viewtopic.php?pid=15454#p15454</id>
		</entry>
</feed>
