Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2005.12.25;
Скачать: [xml.tar.bz2];

Вниз

Определение реального текущего номера записи таблицы   Найти похожие ветки 

 
Gem   (2005-12-05 08:19) [0]

Используются компоненты Table и Dataset. Кой-какие записи удаляются. В форме отображается сколько записей обработано из общего числа. Для этого использую RecNo и RecordCount. При первом удалении записей в таблице все отображается верно. Если производится попытка удалить еще раз записи из этой таблицы, RecNo ведет себя странно. То есть, например, изначально было в таблице 3000 записей. При первой обработке удалено 500 записей. При повторном удалении общее число отображается верно - 2500, а текущий номер записи со временем зашкаливает 2500 и доходит до 3000, как раньше. Как это объяснить? И лечиться ли?

ЗЫ. Просьба не вести бурных баталий по поводу используемых мною двух функций.


 
Anatoly Podgoretsky ©   (2005-12-05 09:24) [1]

Что такое реальный номер записи.
Баталии по поводу используемых тобой функций вести не возможно, поскольку они не указаны. Есть только два свойства, оба из которых не обязаны показывать какую либо достоверную информацию


 
Gem   (2005-12-05 10:31) [2]

> Что такое реальный номер записи.

Это объясняется в тексте сообщения. Все же, если не понятно, пытаюсь разъяснить еще раз. Текущей записи с номером 2600 реально не может быть в базе с 2500 записями (при последующем повторном удалении записей).

> Баталии по поводу используемых тобой функций вести не возможно,
>  поскольку они не указаны.

Извиняюсь за невнимательность, действительно имелось в виду не функции, а свойства.

> Есть только два свойства, оба из которых не обязаны показывать какую либо достоверную информацию

То есть действия RecNo объснениям не поддаются? Для чего тогда вообще оно существует....


 
Morgoth_   (2005-12-05 11:36) [3]

можно предположить, что записи не удалилилсь, а остались с пометкой "удаленные", поэтому общее количество 2500, а текущая может быть до 3000, упаковать попробуй после удаления
хотя возможно я и не прав


 
Anatoly Podgoretsky ©   (2005-12-05 11:44) [4]

Gem   (05.12.05 10:31) [2]
> Что такое реальный номер записи.
Это объясняется в тексте сообщения.


В тексте сообщения это не объясняется.
Поэтому все таки что такое реальный номер записи.

То есть действия RecNo объснениям не поддаются? Для чего тогда вообще оно существует....

На мой взгляд для совместимости со старым обеспечением. По понятиям номер записи это химера в базах данных, они таким понятиями не оперируют. Все понятия теории реляционных баз ограничиваются кортежами и их аттрибутами.


 
Anatoly Podgoretsky ©   (2005-12-05 11:45) [5]

Для тебя будет хорошо, если ты забудешь про RecNo и RecordCount


 
Gem   (2005-12-05 13:50) [6]


> Morgoth_   (05.12.05 11:36) [3]
>
> можно предположить, что записи не удалилилсь, а остались
> с пометкой "удаленные", поэтому общее количество 2500, а
> текущая может быть до 3000, упаковать попробуй после удаления
> хотя возможно я и не прав


возможно ли сжатие с использованием BDE


 
Gem   (2005-12-05 13:54) [7]


> Anatoly Podgoretsky ©   (05.12.05 11:45) [5]
>
> Для тебя будет хорошо, если ты забудешь про RecNo и RecordCount


есть альтернативы?


 
alex_*** ©   (2005-12-05 14:10) [8]

Recno тебе для чего нужен? и что компонент DataSet


 
Gem   (2005-12-06 06:05) [9]


> alex_*** ©   (05.12.05 14:10) [8]
>
> Recno тебе для чего нужен? и что компонент DataSet


болею я, простите, имелось в виду не DataSet - DataSource
А RecNo нужен, чтоб видеть какая запись сейчас обрабатывается


 
Morgoth_   (2005-12-06 10:21) [10]

DbiPackTable(Table.DBHandle, Table.Handle, nil, szDBase, TRUE );


 
alex_*** ©   (2005-12-06 10:41) [11]

какая запись сейчас обрабатывается
- счетчик заведи себе. RecNo во многих компонентах не работает.


 
msguns ©   (2005-12-06 10:42) [12]

>Anatoly Podgoretsky ©   (05.12.05 11:44) [4]
>По понятиям номер записи это химера в базах данных, они таким понятиями не оперируют.

"Базы", конечно, не оперируют. А вот "клиенты" вполне.

Можно и нужно использовать и RecNo, и RecordCount, но !!!

- Во первых, в контексте возвращенного набора данных, но никак не таблицы (таблиц) БД, из которой эти данные были получены. Т.е. это сущности сугубо виртуальные и имеют смысл только с момента, когда данные, полученные запросом (т.е. собственно датасет), становятся доступными клиенту и до того момента, когда этот запрос бюудет закрыт (переоткрыт или "обновлен").

- Во-вторых, учитывать, что не все объекты доступа могут поддерживать эти свойства, а если и могут, то делают это "своеобразно", а именно лишь в тех пределах, в которых "возникает надобность" с т.зр. самих объектов. В частности, после открытия непустого НД RecordCount обычно равен 1, даже если запрос вернул 1000 записей. Поэтому НЕЛЬЗЯ при сканировании (сквозного просмотра всех записей) НД "плясать"  от этой величины:

  for i := 1 to DataSet.RecordCount do ..
Вместо этого надо использовать цикл

 while Not DataSet.Eof do
   begin
    ..
    Next
   end;

В случаях, если нужно получить к-во записей без сканирования (например для оповещения пользователя о кол-ве записей непосредственно после открытия НД) достаточно выполнить такие действия:

With DataSet do
 begin
  Open;
  First;
  Last;
  StatusBar1.Panels[0].Text := "Всего записей - "+IntToStr(RecordCount);
  First;
 end;


 
msguns ©   (2005-12-06 10:53) [13]

Вообще-то джидаи типа Джонмэна, Сникника и т.д. для получения к-ва записей делаю паралелльный запрос Select Count..

;)


 
Gem   (2005-12-06 12:22) [14]


> Morgoth_   (06.12.05 10:21) [10]
>
> DbiPackTable(Table.DBHandle, Table.Handle, nil, szDBase,
>  TRUE );


не помогло


 
msguns ©   (2005-12-06 12:51) [15]

>ini-файл

Таблицу надо предварительно закрыть и перевести в эксклюзив.


 
msguns ©   (2005-12-06 12:52) [16]

Прошу прощения, замечание [15] относилось к посту [14]


 
Morgoth_   (2005-12-06 12:54) [17]

Table.Close ;
   Table.Exclusive := TRUE ;
   Table.Open ;
   DbiPackTable(Table.DBHandle, Table.Handle, nil, szDBase, TRUE );
   Table.Close ;

а что именно не помогло? упаковка не получилась или не решился основной вопрос?


 
Gem   (2005-12-06 13:09) [18]


> msguns ©


с определением количества записей проблем нет, проблема определить текущий номер


> alex_*** ©   (06.12.05 10:41) [11]
>
>
> - счетчик заведи себе. RecNo во многих компонентах не работает.


то есть добавить поле с типом счетчик, но насколька я понимаю, при удалении записи значение поля счетчика не обновляется и это проблему не решит


> Morgoth_   (06.12.05 10:21) [10]
>
> DbiPackTable(Table.DBHandle, Table.Handle, nil, szDBase,
>  TRUE );

функция возвращает значение DBIERR_INVALIDHNDL


 
Gem   (2005-12-06 13:22) [19]


> Morgoth_   (06.12.05 12:54) [17]
>
> Table.Close ;
>    Table.Exclusive := TRUE ;
>    Table.Open ;
>    DbiPackTable(Table.DBHandle, Table.Handle, nil, szDBase,
>  TRUE );
>    Table.Close ;
>
> а что именно не помогло? упаковка не получилась или не решился
> основной вопрос?
>


как ты написал, выдает ошибку table is busy, я делаю так
table.Active:=false;
table.Exclusive:=true;
DbiPackTable(table.DBHandle, table.Handle, nil, szDBase, TRUE );

при этом база не упаковывается, когда делаю проверку на возвращаемое функцией значение оно получается равным DBIERR_INVALIDHNDL


 
alex_*** ©   (2005-12-06 13:43) [20]

делай удаление запросами. Потом обновишь DataSet


 
Плохиш ©   (2005-12-06 13:43) [21]


> Gem   (06.12.05 13:22) [19]

Телепатор сказал, что таблицу в среде разработки тоже закрыть надо.


 
msguns ©   (2005-12-06 14:04) [22]

>Gem   (06.12.05 13:09) [18]
>с определением количества записей проблем нет, проблема определить текущий номер

Что имется в виду под "текущим номером записи" ?
Зачем он нужен ?


 
Anatoly Podgoretsky ©   (2005-12-06 14:08) [23]

msguns ©   (06.12.05 14:04) [22]
Я тоже пытаюсь от него получить этот же ответ, что такое реального текущего номера записи таблицы


 
evvcom ©   (2005-12-06 17:19) [24]

Ну получил ты, например, номер записи 2 или 3. Дальше что? Что с этим собираешься делать?


 
Gem   (2005-12-07 06:46) [25]


> msguns ©   (06.12.05 14:04) [22]
> Что имется в виду под "текущим номером записи" ?
> Зачем он нужен ?

> Anatoly Podgoretsky ©   (06.12.05 14:08) [23]
>
> msguns ©   (06.12.05 14:04) [22]
> Я тоже пытаюсь от него получить этот же ответ, что такое
> реального текущего номера записи таблицы

Под текущим номером подразумевается номер записи, которая на настоящий момент обрабатывается

> evvcom ©   (06.12.05 17:19) [24]
>
> Ну получил ты, например, номер записи 2 или 3. Дальше что?
>  Что с этим собираешься делать?
>

А нужно мне это, чтоб знать сколько уже обработано записей из общего числа


 
Fay ©   (2005-12-07 07:21) [26]

2 Gem   (07.12.05 6:46) [25]
"Номер записи в таблице" <> "номер по порядку в некотором наборе данных"


 
Gem   (2005-12-07 07:27) [27]

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


 
Gem   (2005-12-07 07:34) [28]


> Fay ©   (07.12.05 07:21) [26]
>
> 2 Gem   (07.12.05 6:46) [25]
> "Номер записи в таблице" <> "номер по порядку в некотором
> наборе данных"


мною было прочитано, что при сортировки или удалениии номера записей в dBase не меняются, а мне нужен номер по порядку, я так понимаю RecNo мне не поможет


 
Fay ©   (2005-12-07 07:40) [29]

2 Gem   (07.12.05 7:34) [28]
Я читал, но нак и не понял - нафинг тебе этот номер вАщЕ нужен?


 
Gem   (2005-12-07 08:27) [30]


> Fay ©   (07.12.05 07:40) [29]
>
> 2 Gem   (07.12.05 7:34) [28]
> Я читал, но нак и не понял - нафинг тебе этот номер вАщЕ
> нужен?
>


> А нужно мне это, чтоб знать сколько уже обработано записей
> из общего числа
>

чего не понятного?


 
evvcom ©   (2005-12-07 08:41) [31]


> > А нужно мне это, чтоб знать сколько уже обработано записей
>
> > из общего числа
> >
>
> чего не понятного?

Ты можешь давать много невразумительных ответов типа "просто нужен", "чтобы на него посмотреть", "чтобы его посчитать". Только зачем тебе это нужно, ты так и не ответил. Вразумительным был бы ответ, например, чтобы отобразить progress-bar и правильно обсчитывать прогресс. Твои же "объяснения" - детский лепет.


 
Anatoly Podgoretsky ©   (2005-12-07 08:43) [32]

Gem   (07.12.05 06:46) [25]
Под текущим номером подразумевается номер записи, которая на настоящий момент обрабатывается

Не уходи от вопроса - что такое реальный текущий номер записи таблицы. и что такое в твоем понимании таблица.
Без этого ответ не возможен.


 
Gem   (2005-12-07 08:48) [33]


> evvcom ©   (07.12.05 08:41) [31]
> Ты можешь давать много невразумительных ответов типа "просто
> нужен", "чтобы на него посмотреть", "чтобы его посчитать".
>  Только зачем тебе это нужно, ты так и не ответил. Вразумительным
> был бы ответ, например, чтобы отобразить progress-bar и
> правильно обсчитывать прогресс. Твои же "объяснения" - детский
> лепет.

Елкала-палкала, опять двадцать пять! Если говорю, что нужно узнать сколько уже обработано записей из общего числа, значит так и есть. На форме так и пишу "обработано" столько-то "из" стольки-то. А, если предложить и помочь нечем, так нечего разглагольствовать.


 
Anatoly Podgoretsky ©   (2005-12-07 08:53) [34]

Gem   (07.12.05 08:48) [33]
Это уже совсем другой вопрос, который не имеет отношения к номеру записи.
Вот тебе и Елкала-палкала - пока не объяснишь, до тех пор и двадцатьпятать.
И прекрати наезжать на отвечающих, закрою тему, лучше займись своим интеллектуальным и моральным уровнем.


 
Morgoth_   (2005-12-07 09:58) [35]

Gem, у меня работает.
Но как уже говорили в [20], делай лучше запросами или разбирайся с упаковкой, не все же готовенькое.


 
Gem   (2005-12-07 10:06) [36]


> Anatoly Podgoretsky ©   (07.12.05 08:53) [34]
>
> Gem   (07.12.05 08:48) [33]
> Это уже совсем другой вопрос, который не имеет отношения
> к номеру записи.
> Вот тебе и Елкала-палкала - пока не объяснишь, до тех пор
> и двадцатьпятать.
> И прекрати наезжать на отвечающих, закрою тему, лучше займись
> своим интеллектуальным и моральным уровнем.

В самом начале моего вопроса было написано "...В форме отображается сколько записей обработано из общего числа...". В результате от меня потребовалось повторного написать эту же фразу  "На форме так и пишу "обработано" столько-то "из" стольки-то.", чтобы стало понятно зачем
мне все это нужно. Видимо действительно кому-то стоит заняться своим интеллектуальным уровнем. Не хочу выяснять кому, мне просто была нужна помощь.
Хочу поблагодарить тех, кто действительно хотел помочь.


> Morgoth_   (07.12.05 09:58) [35]
>
> Gem, у меня работает.
> Но как уже говорили в [20], делай лучше запросами или разбирайся
> с упаковкой, не все же готовенькое.

По какой причине функция DbiPackTable может возвращать значение DBIERR_INVALIDHNDL?


 
evvcom ©   (2005-12-07 10:14) [37]


> Елкала-палкала

Ёкала и плакала... :)

см. [35] и выбирай. И где-то говорили про Last и снова First. Хотя за наезды можно было бы и не отвечать.

Ты учти, раз задаешь вопрос, значит надеешься получить ответ. Значит веришь, что есть здесь грамотный народ, который знает больше тебя, хотя бы в том вопросе, который задаешь. И грубить не в твоих интересах. Раз спрашивают зачем, значит надо. Чтобы выяснить, что ты хочешь получить. И, возможно, путь, выбранный тобою в корне неверен. И от твоего конкретного ответа зависит выбор правильного пути.


 
evvcom ©   (2005-12-07 10:18) [38]


> В самом начале моего вопроса было написано "...В форме отображается
> сколько записей обработано из общего числа...".

Долго я отвечал. Не было этого поста еще. Видимо к 30-м постам уже подзабыли то, о чем было сказано в [0]. Будь терпимее.

> По какой причине функция DbiPackTable может возвращать значение
> DBIERR_INVALIDHNDL?

Я бы все-таки использовал запрос. Возможно даже в нем уже можно было бы отсечь еще часть записей, которые, возможно, пропускаются при обработке. И клиенту легче будет.


 
Morgoth_   (2005-12-07 10:19) [39]

Могу только привести тебе полную рабочую процедуру, почему Table is busy это уже у себя смотри.
DBIERR_INVALIDHNDL скорее всего из-за того что не было Open.

procedure Tfrm_Noki.PackTable(TableName: string);
begin
   Table.Close ;
   Table.Exclusive := TRUE ;
   Table.TableName := TableName;
   Table.Open ;
   DbiPackTable(Table.DBHandle, Table.Handle, nil, szDBase, TRUE );
   Table.Close ;
end;


 
msguns ©   (2005-12-07 10:21) [40]

>Gem   (07.12.05 06:46) [25]
>Под текущим номером подразумевается номер записи, которая на настоящий момент обрабатывается
>А нужно мне это, чтоб знать сколько уже обработано записей из общего числа

Ну вот, теперь ясно..
Тебе нужен не "реально текущий номер записи таблицы" (сабж), а порядковый номер записи полученного НД (клиентского курсора). Но ведь это же - совсем другое дело !
Во-первых, поищи в архивах - относительно недавно хдесь была достаточно обширная ветка на эту тему.
Во-вторых, проблема такая есть и она полностью целесообразна, хотя и кажется некоторым форумчанам (тому же АП, к примеру) надуманной.
Сформулировать проблему можно так:
"Контроль позиции в курсоре НД". Для чего обычно надо две вещи:
1. Текущий № записи внутри текущего курсора
2. Количество записей в текущем курсоре

Выделение сделано умышленно, т.к. это - суть и ядро решения, которым ты, видимо, манкировал в своей программе.


 
Gem   (2005-12-07 10:28) [41]


> evvcom ©   (07.12.05 10:14) [37]
И где-то говорили про Last и снова First.
>  

ты об этом?
With DataSet do
begin
 Open;
 First;
 Last;
 StatusBar1.Panels[0].Text := "Всего записей - "+IntToStr(RecordCount);
 First;
end;

а разве для RecordCount имеет значение, где находится курсор? зачем переходить из начала в конец, потом определять число записей, потом опять перемещаться в начало.


 
evvcom ©   (2005-12-07 10:35) [42]


>  Open;
>  First;

Ну здесь First - лишний, так как Open и так на первую запись встает.

> а разве для RecordCount имеет значение, где находится курсор?
>  зачем переходить из начала в конец, потом определять число
> записей, потом опять перемещаться в начало.

Для RecordCount имеет значение, сколько записей было получено с сервера. После Open различные реализации DataSet могут тянуть различное количество записей с сервера. Посмотри SQL Monitor вроде показывает, что происходит с наборами. Каждый Fetch - это одна запись. И только по необходимости выполняются остальные Fetch-и, увеличивающие RecordCount. Last заставляет профетчить все записи с сервера, устанавливая RecordCount в "правильное" значение.


 
msguns ©   (2005-12-07 10:52) [43]

Итак, мы ввели понятие текущего курсора, под которым понимается ничто иное, как подмножество инф-ции из таблиц БД, полученное по запросу к БД НА МОМЕНТ ВЫПОЛНЕНИЯ ЗАПРОСА.
Другими словами, курсор НД показывает "клиенту" не текущее (актуальное) состояние БД, а то, которое БЫЛО на момент открытия запроса. След-но, НЕТ НИКАКИХ ГАРАНТИЙ, ЧТО СОСТАВ И СОДЕРЖИМОЕ ЗАПИСЕЙ ОТКРЫТОГО НА КЛИЕНТЕ КУРСОРА НЕ ИЗМЕНИЛОСЬ В ЛЮБОЙ МОМЕНТ ВРЕМЕНИ !!!
Это - раз.
Теперь - о "два". А именно о изменении "клиентом" записей курсора и реакции на это самого объекта доступа.
При удалении (вставке,изменении) записей в текущем курсоре мы имеем как минимум 2 проблемы: "синхронизации" изменений непосредственно с физической БД и адекватное отображение сделанного изменения в текущем курсоре. Т.е. надо не только "отослать" и проконтролировать "исполнение" изменений в таблице БД, но и отобразить сделанное изменение собственно у себя на клиенте. А вот тут-то и возникает первая трабла: при "обратной" связи может обнаружиться, что наш НД устарел и отличается от того, что был у нас ДО проведения изменения (а фактически на момент открытия).
Здесь важно учесть одну особенность: как "клиент" выполняет отображение изменений в курсоре, ведь он может делать это по-разному: либо извлечь из БД только измененную (добавленную) запись, либо просто переоткрыть весь запрос, по сути выполнив его по-новому.
В случае "одиночного выстрела" мы имеем высокую вероятность "лживости" данных в тек. курсоре ибо объект доступа не "затруднился" сделать полную ревизию ВСЕХ данных в курсоре. Зато мы не узрели никаких тормозов, что делает такую технологию весьма привлекательной при частых коррекциях данных курсора. Особенно если спроектировать интерфейс таким образом, чтобы максимально снизить вероятность межклиентских конфликтов. Как, например, в учетно-складских приложениях, работающих с ДОКУМЕНТАМИ на базе концепции "коррекция документа только с одного РМ".
В случае переоткрытия запроса мы очевидно получаем тормоза. Однако вместе с ними имеем и гарантию того, что непосредственно после изменения увидим актуальное состояние информации в БД. Такая технология предпочтительна в тех же складских программах при работе со справочниками или таблицами текущих остатков товаров. И то, и другое может меняться с неограниченного кол-ва РМ в любой момент времени, в то же время для нас важна актуальность данных.

Итак, мы имеем две технологии, принципиально по-разному контролирующими курсор (а след-но, и его параметры RecNo и RecordCount)
. При этом в большинстве случаев мы не можем знать точно, как отслеживает этот курсор тот объект, который мы используем в качестве метода доступа. Часто мы даже не имеем возможность явно им управлять в этом контексте. Именно поэтому многие предпочитают "ручками" делать как изменения, так и переоткрытия датасета после этих изменений. Такая технология хоть и несколько громоздка, зато обеспечивает полный контроль программы над курсором и, след-но, над его параметрами.


 
msguns ©   (2005-12-07 10:56) [44]

>Gem   (07.12.05 10:28) [41]
>а разве для RecordCount имеет значение, где находится курсор?

ДА !!!
Ибо далеко не всегда после открытия НД объект доступа "утруждается" самостоятельео "перебрать" и подсчитать полученные запросом записи.

>зачем переходить из начала в конец, потом определять число записей,

Затем, чтобы "заставить" TDataSet пересчитать полученніе записи курсора и записать в RecordCount верное для текущего курсора значение.

>потом опять перемещаться в начало.

Затем, чтобы изначально показывать пользователю не хвост, а голову документа (списка).


 
msguns ©   (2005-12-07 11:05) [45]

>Gem   (07.12.05 10:28) [41]
>а разве для RecordCount имеет значение, где находится курсор?

Более того, под "ГДЕ" нужно понимать не только отосительную локацию курсора (смещение относительно базового адреса, по которому расположен в ОП буфер полученных данных), но и абсолютную ! Т.е. ГДЕ ИМЕННО находится этот самый буфер: непосредственно на "клиенте" или на "сервере". От этого очень зависит технология (и скрость соответсвенно) получения очередной записи курсора и, как следствие, значение параметров RecNo и RecordCount.
Одно технологии (например ADO) позволяют управлять выбором абсолютного местонахождения курсора, другие (BDE) делают это сами как считают нужным, оставляя нам право ругать или хвалить их за качество ;))


 
Anatoly Podgoretsky ©   (2005-12-07 11:11) [46]

msguns ©   (07.12.05 10:21) [40]
Я посмотрю как это будет для хBase где порядковый номер записи в курсоре, как таковой отсутствует и именно о нем и идет речь, хоть автор это и усиленно скрывает. Есть реальный порядковый номер записи, но не в наборе, а в самой таблице, но от него нулевая польза для указаной задачи.

И второй момент установленый фильтр, опять же не приходится говорить ни о каком порядковом номер.

Зато вижу смутное упоминание об сколько записей обработано значит есть это знание и это не RecNo. Вот его и надо использовать для обработано N записей из RecordCount.
Если это значение не хранится в переменной, то самое время ввести эту переменную и наращивать ее по мере обработки записей.
RecordCount для xBase работает правильно и не требует перемещения в начало/конец.


 
app ©   (2005-12-07 11:13) [47]

А так как наезды не прекратились [36], не смотря на предупреждение, то тема закрывается до исправления политики автора в части задавания вопрос и ведения дисскуссии.



Страницы: 1 2 вся ветка

Форум: "Начинающим";
Текущий архив: 2005.12.25;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.61 MB
Время: 0.014 c
2-1134294907
Kot
2005-12-11 12:55
2005.12.25
Реидексация


14-1133366744
Fl@sh
2005-11-30 19:05
2005.12.25
Посоветуйте книгу, где хорошо расписаны Rave Reports


2-1133791269
sanich
2005-12-05 17:01
2005.12.25
Непонятная ошибка в StringReplace


2-1134117882
Федот
2005-12-09 11:44
2005.12.25
Выделение памяти только для себя


8-1121459743
ronyn
2005-07-16 00:35
2005.12.25
Как проигрывается OGG формат?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский