Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Программирование (VB,C#,ASP,.NET): новости, советы, примеры



Выпуск # 320


http://www.kbyte.ru/

 

Новый выпуск!

Здравствуйте дамы и господа!
Представляю очередной выпуск рассылки научно-информационного портала Kbyte.Ru. Надеюсь он Вам понравится. Если у Вас есть какие либо вопросы или предложения по рассылке, пишите нам – admin@kbyte.ru!

 

Содержание выпуска

Система ЭКСПЕРТ

    Вопрос #001017: Бесплатные программы

    Вопрос #001014: Avi и Mpeg4 в Visual Basic

    Вопрос #000952: Обработка файлов в C# (.NET 2.0)

    Вопрос #000947: Секундомер

    Вопрос #000937: DLOOKUP??

Последнее на форумах

    Версионность библиотек

    Обрабаотка нескольких запросов

    Копирование файлов с заданным разрешением

    Многопоточность

    ListView динамическое обновление

Последние статьи

    Нестандартная форма

    Как узнать размер базы данных MySQL через php

    Взаимодействие с другими сайтами через HTTP (HttpWebRequest и HttpWebResponse)

    Работа с SQL – Запросы

    Использование XML.Serialization

Интересные коды и решения

Юмор на Kbyte.Ru

 

Система ЭКСПЕРТ

 

Система «Эксперт» - уникальная система, которая поможет решить, если не все, то многие Ваши проблемы с программированием и разработкой! Если у Вас есть какой-либо вопрос по программированию или разработке, то Вы всегда можете задать его нашим Экспертам! При этом каких-либо особых действий от Вас не потребуется! Просто отправьте Ваш вопрос на адрес mailto:expert@kbyte.ru, в теме письма укажите тему вопроса, в тексте – сам вопрос, и все! Эксперты дадут Вам ответ в течение 12-24 часов, на тот адрес, с которого Вы отправите вопрос. Все проще простого! Никакой регистрации и заполнение бесконечных форм, просто спросите и получите ответ ;-)


Вопрос #001017: Бесплатные программы

Автор вопроса: Sarj // 03.06.2008 / 08:56

Уважаемые эксперты, поскажите пожалуйста бесплатный аналог Corel Draw. Очень надо...

.....

Отвечает: Алексей Немиро // 03.06.2008 / 09:02

Здравствуйте, Sarj.

http://inkscape.org/

--
С наилучшими пожеланиями,
Немиро Алексей http://aleksey.nemiro.ru/

 

Вопрос #001014: Avi и Mpeg4 в Visual Basic

Автор вопроса: алексей // 02.06.2008 / 12:36

Как можно проигрывать эти форматы в вижал бэйсик? Пример на сайте не работает.

.....

Отвечает: Алексей Немиро // 02.06.2008 / 12:43

Здравствуйте, Алексей.

Можно использовать MediaPlayer. Для этого его нужно подключить к
проекту через меню Project (Проект) -> Components (Компоненты), в
появившемся окне найти и выбрать Windows Media Player. Далее, в
панели инструментов должна появиться иконка плеера, который можно
разместить на форме. Указать файл для проигрывания можно
в свойство URL, или FileName в зависимости от версии проигрывателя.

--
С наилучшими пожеланиями,
Немиро Алексей http://aleksey.nemiro.ru/

 

Вопрос #000952: Обработка файлов в C# (.NET 2.0)

Автор вопроса: Сергей // 09.05.2008 / 18:07

Доброе время суток!
В общих словах, такая задача поставлена передо мной: На веб-странице
пользователь выбирает файл, нажимает кнопку "Импорт" и из этого файла
данные импортируются в таблицу БД Oracle.
Файл должен быть текстовым, первые 2 строки- информация о времени и
логине того, кто выгружал. После них идут строки данных, поля
разделяются симоволом | .
Просьба дать ссылки на документацию по работе с файлами, которые могут
помочь :-)

Отвечает: Алексей Немиро // 12.05.2008 / 10:34

Здравствуйте, Сергей.

Необходимые классы и функции для работы с файлами лежак в пространстве имен System.IO. Также Вам могут понадобиться классы для работы с регулярными выражениями, которые лежат в пространстве имен System.Text.RegularExpressions.
Что касается импорта файлов, то данные можно взять прямо из потока FileUpload.PostedFile.InputStream, передать их в StreamReader и обработать при помощи регулярных выражений.

--
С наилучшими пожеланиями,
Немиро Алексей http://aleksey.nemiro.ru/

 

Вопрос #000947: Секундомер

Автор вопроса: Александр // 08.05.2008 / 17:40

Добрый день!
Как сделать секундомер на сайте kbyte.ru много но вот все они выдают результат как 345сек, а мне надо 1:45:01 то есть в временом формате. Как сделать???

.....

Отвечает: Алексей Немиро // 09.05.2008 / 08:29

Здравствуйте, Александр.

Зная, что в минуте 60 секунд, в часе 60 минут, а в сутках 24 часа, можно легко превратить 345 секунд в нужный формат.
001:
002:
003:
004:
005:
006:
007:
008:
009:
Dim sec As Integer
sec = 345
Dim ssec As Integer, min As Integer, hour As Integer
If sec > 59 Then
 min = Int(sec / 60)
 ssec = sec Mod 60
End If
If min > 59 Then hour = Int(min / 60)
MsgBox sec & " сек. = " & hour & " ч. " & min & " мин. " & ssec & " сек."



--
С наилучшими пожеланиями,
Немиро Алексей http://aleksey.nemiro.ru/

 

Вопрос #000937: DLOOKUP??

Автор вопроса: Алексей // 05.05.2008 / 16:37

Почему те поля формы, которые имеют в ControlSource функцию Dlookup не записывают значение полей в конечную таблицу?

--------------------------------------
Категория: --- MS Access

Отвечает: Алексей Немиро // 06.05.2008 / 05:24

Здравствуйте, Алексей.

Из справки MS Access: Функция Dlookup
При использовании этой функции не учитываются
несохраненные изменения записей подмножества. Если функция
DLookup должна использовать измененные значения, необходимо сначала сохранить
изменения с помощью команды Сохранить запись в меню
Записи, с помощью перемещения фокуса на другую запись или
метода Update.


--
С наилучшими пожеланиями,
Немиро Алексей http://aleksey.nemiro.ru/

 


Чтобы задать Ваш вопрос, отправьте его на адрес expert@kbyte.ru

Раздел Эксперт на сайте Kbyte.Ru

Наверх

 

 

Последнее на форумах

Версионность библиотек | Автор: Neco
Добавлено: 02.06.2008 / 01:27 | ответов: 8 | просмотров: 147

Не подскажете ли, как работать с версиями библиотек? Никогда не нужно было, а сейчас вот понадобилось.
1. чтобы использовать разные версии одной библиотеки их обязательно регистрировать? как называется эта штука, где локально библиотеки регистрируются? как зарегистрировать там библиотеку программно? можно ли регистрировать одну библиотеку на несколько компов в сети?
2. как привязать приложение к одной конкретной версии библиотеки? чтобы экзешник версии 1.1 работал с библиотекой только версии 4.5 и никакой больше?
3. как автоматически прибавлять билд у библиотеки? и при этом, чтобы экзешник в проекте автоматически апгрейдился к этой новой версии.

Ответить на это сообщение | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 1 | Автор: EROS
Добавлено:02.06.2008 / 08:33
чтобы использовать разные версии одной библиотеки их обязательно регистрировать?

Если речь идет о библиотеках .NET то их вообще не надо регистрировать. Достаточно их положить в папку с исполняемым файлом
как называется эта штука, где локально библиотеки регистрируются?

GAC - The Global Assembly Cache or GAC is a machine-wide .NET assemblies cache for Microsoft's CLR platform
В GAC помещают сборки только в том случае когда несколько приложений юзают одну библиотеку
как привязать приложение к одной конкретной версии библиотеки? чтобы экзешник версии 1.1 работал с библиотекой только версии 4.5 и никакой больше?

Для этого тебе необходимо в свойствах проекта раскрыть папку References, выделить необходимую сборку далее в окне свойств установить CopyLocal = true (при этом сборка будет копироваться в папку приложения .. это на тот случай если она расположена в GAC) Далее необходимо установить свойство Specific Version = false и после этого тебе останется только указать необходимую версию сборки
как автоматически прибавлять билд у библиотеки?

В свойствах проекта на зкладке Publish надо установить галочку Automatically increment revision with each publish При каждой публикации будет меняться build. Кроме того в файле AssemblyInfo есть такая фича
001:
002:
003:
004:
005:
006:
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]

Colorized by: Eros.CodeSyntaxColor Engine

Правда я ее никогда не использовал
чтобы экзешник в проекте автоматически апгрейдился к этой новой версии

Для этого проект dll и ехе должны быть в одном солюшене. При этом при каждой компиляции ехе он будет привязываться к существующей версии dll(только надо правильно настроить порядок компиляции приложений в солюшене)

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 2 | Автор: EROS
Добавлено:02.06.2008 / 08:39
можно ли регистрировать одну библиотеку на несколько компов в сети?

не уверен, но думаю что нет... GAC привязан к конкретной машине

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 3 | Автор: Neco
Добавлено:02.06.2008 / 19:40
Спасибо, EROS.
Уточню ситуацию по поводу регистрации - планирую выполнять в библиотеке некоторые операции, которые будут храниться в xml-файле. Данный xml-файл будет в дальнейшем использоваться, чтобы откатить применённые операции. Однако, версии библиотек будут постпенно изменяться, xml-файл тоже может видоизмениться - и я хотел, чтобы несмотря ни на что, при получении старого xml-файла программа находила нужную библиотеку и откатывала операции с её помощью.
поэтому и подумал, что если в этом самом GAC'е можно хранить разные версии одних и тех же библиотек, может быть можно конкретно указать, какая версия мне требуется именно сейчас?

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 4 | Автор: EROS
Добавлено:02.06.2008 / 20:00
может быть можно конкретно указать, какая версия мне требуется именно сейчас?

Если я правильно понял твою мысль тебе необходимо динамически загружать сборку определенной версии в зависимости от каких то условий и выполнять какие то действия с этой библиотекой. В этом случае имхо тебе придется загружать нужную сборку через рефлексию(там уже можно будет динамически определить какая версия и т.д.), создавать объект нужного класса и работать с ним. И лучше всего реализовать это все через интерфейсы.

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 5 | Автор: Neco
Добавлено:02.06.2008 / 21:17
всё здорово работает, спасибо - даже не думал, что настолько просто. не предполагал, что можно проворачивать всё прямо в памяти - не скидывая ничего на диск.

001:
002:
003:
004:
005:
006:
007:
008:
009:
010:
011:
012:
013:
014:
015:
016:
017:
018:
019:
020:
021:
022:
023:
namespace TestMultiLibApp {
  public interface MyFace {
    string GetVersion();
  }
  class Program {
    static void Main(string[] args) {
      byte[] buf;
      using (System.IO.FileStream fs_1 = new System.IO.FileStream("TestMultiLib - ver4.dll", System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.ReadWrite)) {
        using (System.IO.BinaryReader bin = new System.IO.BinaryReader(fs_1)) {
          buf = bin.ReadBytes((int)fs_1.Length);
        }
      }
      System.Reflection.Assembly asm_1 = System.Reflection.Assembly.Load(buf);
      
      MyFace my_obj = (MyFace)asm_1.CreateInstance("TestMultiLib.Class1");
      object rez = my_obj.GetVersion();
      //object cls1 = asm_1.CreateInstance("TestMultiLib.Class1");
      //object rez = cls1.GetType().InvokeMember("GetVersion", System.Reflection.BindingFlags.InvokeMethod, null, cls1, null);
    }
  }
}

Colorized by: Eros.CodeSyntaxColor Engine

ничего не стоит держать все версии в базе данных и загружать их в кэш по мере надобности.
Единственное, кое-какая запара с выяснением конкретно каждой части версии (Major Version, Minor Version Build Number Revision) - ощущение, что надо парсить текст (ну я человек не гордый).
просто может понадобиться в будущем выпускать специально кое-что старым номером - чтобы откатывать, если откат первый раз глючно прописали :)

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 6 | Автор: EROS
Добавлено:02.06.2008 / 22:22
Единственное, кое-какая запара с выяснением конкретно каждой части версии (Major Version, Minor Version Build Number Revision) - ощущение, что надо парсить текст

Не надо ничего парсить... тебе просто необходимо получить System.Reflection.AssemblyName.Version и спокойно с ним работать. Либо как вариант иногда бывает удобно узнать версию через System.Reflection.AssemblyVersionAttribute Но первый способ мне больше нравится так как он возвращает объект типа System.Version его методов тебе хватит с лихвой.

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 7 | Автор: EROS
Добавлено:02.06.2008 / 22:30
И вместо загрузки сборки через байтовый массив удобнее юзать System.Reflection.Assembly.LoadFile(string) разумеется в том случае если грузишь сборку с HDD, если же будешь грузить из БД, то там разумеется через байтовый массив придется делать

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 8 | Автор: Neco
Добавлено:02.06.2008 / 22:54
честно говоря вначале показалось, что AssemblyName и есть парсер - в случае, если нет файла, приходтися использовать конструктор с текстовой строкой - FullName. Но вроде как нельзя выцедить столько информации из одного только FullName, так что буду надеяться, что он в памяти ищет сборку с таким именем и потом уже с ней работает.
в общем, вроде как всё у меня получится :)

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Обрабаотка нескольких запросов | Автор: Arti
Добавлено: 01.06.2008 / 23:31 | ответов: 7 | просмотров: 144

Здравствуйте, есть следующая необходимость, нужно сделать несколько последовательных запросов к базе и запросы к предыдущим запросам, а итоги показать, ну например в том же ListView, т.е. делается один запрос получаются некоторые данные, затем втрой запрос, еще кое-какие данные и ещё один запрос на получение данных из первого и второго запроса, а результат показать в ListView. Какими инструментами нужно воспользоваться для этого. Сначала думал создавать из первого и второго запросов таблицы в DataSet потом как-то из этих таблиц в DataSet сделать выборку, но не знаю правильно ли так делать или нет и можно ли ак вообще сделать, потому как при первых запросах объем данных большой, но временный, важны результаты последнего запроса. Что можно со всем с этим поделать? В частности нужно сделать выборку по всем товарам , выборку из таблицы с описаниями товара, выборку приходов каждого товара, расходов, подсчет остатков, формирование этого всего в одну таблицу и вывод этой таблицы в ListView. Дайте пожалуйста направление куда двигаться.

Ответить на это сообщение | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 1 | Автор: EROS
Добавлено:02.06.2008 / 00:02
Вариантов решения этой проблемы как минимум 2.. В зависимости от поставленной задачи писать мегазапрос с группировками и объеденением данных из нескольких таблиц, либо, как правило, в подбных ситуциях пишут хранимую процедуру в которой создают временную таблицу необходимой структуры, загоняют в нее все данные из разных запросов, затем делают выборку и убивают таблицу. И это все в рамках одной ХП.. Но как мне кажется у тебя проблема в структуре твоей БД.. В рамках твоего приложения подобной ситуации возникнуть не должно было... у тебя же там по сути 3-5 таблиц не более...

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 2 | Автор: Neco
Добавлено:02.06.2008 / 00:32
по-моему, вполне можно обойтись одним запросом. а если необходимость в трёх запросах всё же есть, то советую не делать ничего "ручками" с датасетами и прочим.
работу с данными, их компоновкой, надо перекладывать на БД. в слое приложения формируются запросы, их последовательность и т.п. - логика в общем. слой отображения, отображает.
не нужно совать работу с агрегированием (к примеру) данных в слой приложения - датасеты, это сплошь коллекции с последовательным перебором - в общем случае, вся эта музыка будет тормозить.
p.s. хотел бы предостеречь от решения с временной таблицей. EROS, я не знаю как в mssql, но в оракле, например, создание и уничтожение таблицы это DDL-операция. а все DDL-операции (опять же в оракле, точно) комитят транзакцию. поэтому решение может получится не вполне гибким - если уж и использовать временную таблицу, то только через insert/delete (truncate тоже нельзя).

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 3 | Автор: Arti
Добавлено:02.06.2008 / 01:00
Таблиц у меня в базе 4 это (товары, приходы, расходы, остатки на начало года(чтобы считать годовой план) в качестве бд используется файл базы Access), сейчас у меня действительно есть мегазапрос, но не знаю хорошо это или плохо. По части второго решения возникает вопрос, а зачем тогда писать программу? Ведь это все можно сделать в самой базе. Сейчас бд рассматриваю как хранилище таблиц, а программа как эти самые запросы, потому хочу понять где хранить результаты этих временных запросов, чем работать с этими данными и т.д. и как вообще строить логику???
P.S. Честно говоря когда брался за это дело не предполагал что все так сильно усложниться и запутается, это я не к тому что испугался трудностей, а к тому что с такой-то поддержкой как здесь думаю никто бы не пугался :)

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 4 | Автор: Neco
Добавлено:02.06.2008 / 01:25
ну если можно обойтись запросом - то программу действительно лучше не писать :)
первая фаза при создании программы - это принятие необходимости и выбор альтернативы. под выбором альтернативы подразумевается использование готовых инструментов, покупка сторонней программы или написание собственной.
моё мнение по поводу вопроса использовать ли сложные запросы - использовать, но избегать конструкций, специфичных для конкретной БД. К примеру, у оракла есть конструкция start with connect by позволяющая более-менее комфортно работать с древовидными структурами. но если построить приложение на этой базе, то оно станет труднопереносимым - не лучше задуматься сразу - как это решается там, где нет данной конструкции?
чтобы понять что и где расположить, надо начать понимать что есть что.
к примеру, запрос - это просто готовая, скажем так, неактивная сущность. Это не программа - это декларация. Её должен формировать слой логики, а "выполнять" слой данных. А хранимая процедура - это уже логика. Лучше не допускать, чтобы логика размазывалась между разными слоями (хотя порой можно позволить себе эту вольность) - иначе слой логики теряет свою целостность - он уже не так самодостаточен.
Думаю, что довольно часто слой логики почти никак не обрабатывает данные, приходящие от слоя данных - он может напрямую пересылать их слою отображения. Максимум, что он может - видоизменить их - поменять формат хранения. Но именно в нём хранится информация о том, что за данные нужно запросить.

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 5 | Автор: EROS
Добавлено:02.06.2008 / 01:34
советую не делать ничего "ручками" с датасетами и прочим

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

+1

p.s. хотел бы предостеречь от решения с временной таблицей

Никто не говорит о создании физической таблицы в БД через DDE.. Речь идет о создании таблицы в памяти. Например как в этом примере:
001:
002:
003:
004:
005:
006:
007:
008:
009:
010:
011:
012:
013:
014:
015:
016:
017:
018:
019:
020:
021:
022:
023:
024:
025:
026:
027:
028:
029:
030:
031:
032:
033:
034:
035:
036:
037:
038:
039:
040:
041:
042:
043:
044:
045:
046:
047:
048:
049:
050:
051:
052:
053:
054:
055:
056:
057:
058:
059:
060:
061:
062:
063:
SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
go

ALTER PROCEDURE [dbo].[aspnet_Membership_FindUsersByEmail]
  @ApplicationName    nvarchar(256),
  @EmailToMatch     nvarchar(256),
  @PageIndex       int,
  @PageSize       int
AS
BEGIN
  DECLARE @ApplicationId uniqueidentifier
  SELECT @ApplicationId = NULL
  SELECT @ApplicationId = ApplicationId FROM dbo.aspnet_Applications WHERE LOWER(@ApplicationName) = LoweredApplicationName
  IF (@ApplicationId IS NULL)
    RETURN 0

  -- Set the page bounds
  DECLARE @PageLowerBound int
  DECLARE @PageUpperBound int
  DECLARE @TotalRecords  int
  SET @PageLowerBound = @PageSize * @PageIndex
  SET PageUpperBound = @PageSize - 1 + @PageLowerBound

  -- Create a temp table TO store the select results
  CREATE TABLE #PageIndexForUsers
  (
    IndexId int IDENTITY (0, 1) NOT NULL,
    UserId uniqueidentifier
  )

  -- Insert into our temp table
  IF( @EmailToMatch IS NULL )
    INSERT INTO #PageIndexForUsers (UserId)
      SELECT u.UserId
      FROM  dbo.aspnet_Users u, dbo.aspnet_Membership m
      WHERE u.ApplicationId = @ApplicationId AND m.UserId = u.UserId AND m.Email IS NULL
      ORDER BY m.LoweredEmail
  ELSE
    INSERT INTO #PageIndexForUsers (UserId)
      SELECT u.UserId
      FROM  dbo.aspnet_Users u, dbo.aspnet_Membership m
      WHERE u.ApplicationId = ApplicationId AND m.UserId = u.UserId AND m.LoweredEmail LIKE LOWER(@EmailToMatch)
      ORDER BY m.LoweredEmail

  SELECT u.UserName, m.Email, m.PasswordQuestion, m.Comment, m.IsApproved,
      m.CreateDate,
      m.LastLoginDate,
      u.LastActivityDate,
      m.LastPasswordChangedDate,
      u.UserId, m.IsLockedOut,
      m.LastLockoutDate
  FROM  dbo.aspnet_Membership m, dbo.aspnet_Users u, #PageIndexForUsers p
  WHERE u.UserId = p.UserId AND u.UserId = m.UserId AND
      p.IndexId >= @PageLowerBound AND p.IndexId <= @PageUpperBound
  ORDER BY m.LoweredEmail

  SELECT @TotalRecords = COUNT(*)
  FROM  #PageIndexForUsers
  RETURN @TotalRecords
END

Colorized by: Eros.CodeSyntaxColor Engine


Если ты заметил, то такую таблицу даже дропать не надо. Но беда не в этом.. беда в том, что у него Access, а с ним подобная фишка не прокатит, там реально только через DDE..

Arti, мегазапрос в любом случае лучше танца с бубнами вокруг dataset. Дело в том, что все операции производит ядро базы данных и ты получаешь только конечный результат не тратя время на перекачку лишних данных из БД в твое приложение и упаковку всего этого дела в коллекции dataset'a
Сейчас бд рассматриваю как хранилище таблиц, а программа как эти самые запросы, потому хочу понять где хранить результаты этих временных запросов, чем работать с этими данными и т.д. и как вообще строить логику???

Neco уже ответил на твой вопрос... Все, что касается данных, выборка,агрегирование и все остальное должно быть вынесено на уровень БД, а в приложении только отображение данных и изменения. Более того.. запросы предпочтительнее всего хранить в виде откомпилированных хранимых процедур.. они будут выполняться на порядок быстрее запросов сформированных в программе на лету.

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 6 | Автор: Neco
Добавлено:02.06.2008 / 01:37
где-то было написано, что когда вы разрабатываете систему, задумайтесь - можно ли в вашем приложении заменить базу данных на xml-файл. если можно, значит ваше решение достаточно правильное.
сам я всегда ограничивался вопросом "заменить одну СУБД на другую" - иначе бы пришлось писать ещё один слой - слой доступа к данным, в котором (в случае с полноценной СУБД) ничего бы не было, кроме передастовых функций.
может и правильно, но не хотца :)

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 7 | Автор: Neco
Добавлено:02.06.2008 / 01:48
Если ты заметил, то такую таблицу даже дропать не надо. Но беда не в этом.. беда в том, что у него Access, а с ним подобная фишка не прокатит, там реально только через DDE..

ух ты! шикарно!
вот за что я уважаю MS - умеют делать реально удобные и нужные вещи :)

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Копирование файлов с заданным разрешением | Автор: Вероничка Огурцова
Добавлено: 01.06.2008 / 18:03 | ответов: 12 | просмотров: 209

Всем добрый день.
Господа программисты помогите юнной ламерше написать программку на VB.NET 2005 малееенькую(((

Нужно из директории, которую укажет пользователь, копировать все файлики с расширением BMP...
А я не умею работать с файлами на ВБ(( пробовала и не выходит... умоляю помогите... мне к 7 вечера эта програмка нужна... Это вопрос жизни и смерти(((

Ответить на это сообщение | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 1 | Автор: EROS
Добавлено:01.06.2008 / 18:43
001:
002:
003:
004:
005:
006:
007:
008:
009:
010:
011:
012:
013:
014:
015:
016:
017:
018:
string m_dirSource = "C:\Папка с картинками";
      string m_dirDestination = @"C:\Новая папка для картинок";
      try
      {
        if (!Directory.Exists(m_dirDestination)) Directory.CreateDirectory(m_dirDestination);
        string[] m_bmpFiles = Directory.GetFiles(m_dirSource, "*.bmp", SearchOption.TopDirectoryOnly);
        foreach (string m_filePath in m_bmpFiles)
        {
          string m_fileName = Path.GetFileName(m_filePath);
          File.Copy(m_filePath, Path.Combine(m_dirDestination, m_fileName));
        }
      }
      catch (Exception ex)
      {
        MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
      }

Colorized by: Eros.CodeSyntaxColor Engine


вот как то так... на VB сама переводи.

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 2 | Автор: Вероничка Огурцова
Добавлено:01.06.2008 / 19:05
Ребят... я знаю как это сделать поидее... Указываем каталог, указываем фильтр по разрешению и копируем, прога то ламерская... Но я не умению прогить на VB и не выходит у емня ничего... Пожалуйста! Господа программисты, потратить одну минуточку на человека у ужаснейшем положении и ы полной безнадеги... Всего то лишь нужен код, киньте сюда его пожалуйста!(
Опендиалог (пользователь выбирает каталог)
Фильтр копирования по разрешение., нужны только BMP файлы
и копируем файлы в новый каталог (пусть это будет c:\)

Простенькая програмка но абсолютно не знакомый мне язык... И не мой это уровень чтобы за день освоиться в новой среде програмирования... Поэтому и пишу на форуме. Такой большой форум, тут столько людей и полезной информации, думаю я останусь тут надолго если мне помогут реально.
Обычно везде лесом шлют агресоры всякие и дети не разумные... Нажеюсь тут подругому) Мне даже письмо прислали уже с одним ответом, но нужно именно на VB.NET ((
Я представляю как в си например это должно быть... Но не на Вб(((

Пожалуйста помогите(

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 3 | Автор: Вероничка Огурцова
Добавлено:01.06.2008 / 19:37
Никто мне похоже ничего не даст...(
Всем жалко минутки на нисчастную ламершу((

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 4 | Автор: Игорь Голов
Добавлено:01.06.2008 / 19:58
Мне не жалко.
Хочу заметить, что ламер - этото ругательно. Вам себя лучше новичком (NewBie) называть....
Договорились?
Будем посмотреть на задачу с точки зрения кодера....

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 5 | Автор: Вероничка Огурцова
Добавлено:01.06.2008 / 20:22
"с точки зрения кодера...."
ой спасибо)
и как?) Что видет кодер в этой задачке?

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 6 | Автор: Игорь Голов
Добавлено:01.06.2008 / 23:22
А он её практически уже увидел.
Осталось откомментировать - и можно сдавать Заказчику...

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 7 | Автор: Игорь Голов
Добавлено:01.06.2008 / 23:58
Интересная Задача. Код позже помещу - его нужно комментариями снабдить. На всякий пожарный... :)

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 8 | Автор: Вероничка Огурцова
Добавлено:02.06.2008 / 00:31
УРААА!!!! Я сама все же справилась....)
Учитесь умниненькие дядички строяшие из себя тут хакеров))
Не смогли решить вы простую задачку даже!)
А я сделала!!!!)

001:
002:
003:
004:
005:
006:
007:
008:
009:
010:
011:
012:
013:
014:
015:
016:
017:
018:
019:
020:
021:
022:
023:
024:
025:
026:
027:
028:
029:
030:
031:
032:
033:
034:
035:
036:
037:
038:
039:
040:
041:
042:
043:
044:
045:
046:
047:
048:
049:
050:
051:
052:
053:
054:
055:
056:
057:
058:
059:
060:
061:
Dim i As Int16
  Dim j As Integer
  Dim q As Integer
  Dim s As String
  Dim n As String
  Dim r As String
  Dim f As String
  Dim na As String
  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim fileList() As String = System.IO.Directory.GetFiles(s)
    For Each filePath As String In fileList
      Console.WriteLine(filePath)
      i = i + 1
    Next

    For j = 0 To i - 54
      MsgBox(j)
      r = Mid(fileList(j), Len(fileList(j)) - 2, 3)
      If r = "bmp" Then
        For q = Len(fileList(j)) To 1 Step -1
          If Mid(fileList(j), q, 1) = "\" Then
            na = Mid(fileList(j), q + 1, Len(fileList(j)) - q)
            FileCopy(s & "\" & na, n & "\" & na)
            Exit For
          End If
        Next

        r = ""
      End If
    Next

  End Sub

  Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    OpenFileDialog1.ShowDialog()
    s = OpenFileDialog1.FileName
    For i = Len(s) To 1 Step -1
      If Mid(s, i, 1) = "\" Then
        s = Mid(s, 1, Len(s) - (Len(s) - i + 1))
        Exit For
      End If

    Next
    L1.Text = s
  End Sub

  Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    OpenFileDialog1.ShowDialog()
    n = OpenFileDialog1.FileName
    For i = Len(n) To 1 Step -1
      If Mid(n, i, 1) = "\" Then
        n = Mid(n, 1, Len(n) - (Len(n) - i + 1))
        Exit For
      End If

    Next
    L2.Text = n
  End Sub
End Class

Colorized by: Eros.CodeSyntaxColor Engine

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 9 | Автор: Neco
Добавлено:02.06.2008 / 00:43
нда...
i - 54 как-то настораживает...

девушка, Вам EROS привёл абсолютно нормальный код - оставалось только точки с запятыми на концах строк поубирать и получился бы VB. C# и VB.Net на данном уровне использования - это одно и то же абсолютно. Если умеете читать код на си, отличить функции от операторов не составило бы труда. После этого перевести алгоритм в VB было бы доступно любому, кто хоть раз открывал VBA в экселе. Кроме того, есть ресурсы http://geekswithblogs.net/Gaurav/archive/2006/08/23/88947.aspx позволяющие без труда перевести 16 строк кода с C# на VB.Net.
А Вы развели тут непонятно что.

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 10 | Автор: Вероничка Огурцова
Добавлено:02.06.2008 / 00:45
Это непонятно что работает! И нормально работает...
плохой форум, ухожу от вас... плохие вы)

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 11 | Автор: Вероничка Огурцова
Добавлено:02.06.2008 / 00:49
мммм... а всем кому помог и отклинулся хотя бы боооольшое спасибо!За ссылочка транслитора спасибо тоже.

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 12 | Автор: EROS
Добавлено:02.06.2008 / 10:32
i - 54 как-то настораживает...

ты нифига не шаришь... это сейчас так по новому делать надо! )))

а вообще.. грустно все это.. я подобного извращения уже лет 5 не видел....

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Многопоточность | Автор: Arti
Добавлено: 30.05.2008 / 23:52 | ответов: 8 | просмотров: 193

Не получается разобраться со следующей проблемой
Код основной формы
001:
002:
003:
004:
005:
006:
007:
008:
009:
010:
011:
012:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    ' Создаем новый поток
    Dim nth As New System.Threading.Thread(AddressOf Fill)
    ' запускаем
    nth.Start()
  End Sub

  Public Sub Fill()
    MyLV.FillOfProducts(PreparationList, True)
  End Sub

Colorized by: Eros.CodeSyntaxColor Engine


код модуля (функции PreparationList)
001:
002:
003:
004:
005:
006:
' получаем список препаратов из базы
  Public Function PreparationList() As List(Of Prepapration)
    Return MyBD.DBGetList
  End Function

Colorized by: Eros.CodeSyntaxColor Engine

код наследованного ListView
001:
002:
003:
004:
005:
006:
007:
008:
009:
010:
011:
012:
013:
014:
015:
016:
017:
018:
019:
020:
021:
022:
023:
024:
025:
026:
027:
028:
Public Class ListViewMy
  Inherits ListView

  Public Sub FillOfProducts(ByVal lop As List(Of Prepapration), ByVal noempty As Boolean)
    Select Case noempty
      Case False
        MyClass.Items.Clear()
        For Each Prep As Prepapration In lop
          Dim lvitm As New ListViewItem
          lvitm.Text = Prep.Code
          lvitm.SubItems.AddRange(New String() {Prep.MNN, Prep.TNLP, Prep.Cost, Prep.RestOfYear, Prep.CurentRest, Prep.CurentPlanStatus})
          MyClass.Items.Add(lvitm)
        Next
      Case True
        Me.Items.Clear()
        For Each Prep As Prepapration In lop
          If Not Prep.RestOfYear = 0 Then
            Dim lvitm As New ListViewItem
            lvitm.Text = Prep.Code
            lvitm.SubItems.AddRange(New String() {Prep.MNN, Prep.TNLP, Prep.Cost, Prep.RestOfYear, Prep.CurentRest, Prep.CurentPlanStatus})
            MyClass.Items.Add(lvitm)
          End If
        Next
    End Select
  End Sub
End Class

Colorized by: Eros.CodeSyntaxColor Engine

В результате запуска все срабатывает нормально но через сек. строка класса ListViewMy Me.Items.Clear() выделяется и выдается следующая ошибка Cross-thread operation not valid: Control 'MyLV' accessed from a thread other than the thread it was created on. . Как можно решить эту проблему

Ответить на это сообщение | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 1 | Автор: Алексей
Добавлено:31.05.2008 / 05:40
'примерно так
001:
002:
003:
004:
005:
006:
007:
008:
009:
010:
011:
012:
013:
014:
015:
016:
Delegate Sub FillDelegate

'...
'...
'...

Public Sub Fill()
 If Me.InvokeRequired Then
  Me.Invoke(New FillDelegate(Fill))
  Return
 End If
 MyLV.FillOfProducts(PreparationList, True)
End Sub

_______________________
Colorized by: Eros.CodeSyntaxColor Engine


_________________
Это сообщение добавлено через Kbyte.Ru Forum Mail Conference (FMC)

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 2 | Автор: Arti
Добавлено:31.05.2008 / 12:29
Спасибо, получилось, только
001:
002:
003:
Me.Invoke(New FillDelegate(AddressOf Fill))

Colorized by: Eros.CodeSyntaxColor Engine
. Если можно опишите в двух словах принцип работы и что за Invoke, так всегда нужно будет организовывать многопоточность или только когда дело касается контролов?

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 3 | Автор: Arti
Добавлено:31.05.2008 / 16:55
Косяк опять начал вылазить, причиной тому стало добавление в код формы процедуры
001:
002:
003:
004:
005:
Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged
    Fill()
  End Sub

Colorized by: Eros.CodeSyntaxColor Engine

вобще получается интересная ситуация, т.е даже если убрать из кода формы Private Sub Form1_Load (проблема решается) все равно при загрузки происходит заполнение ListView только на этот раз вызывает это действие выше указанная процедура, спрашивается почему? Ведь по идеи всей литературы которая мне встречалась при загрузке должно выполняться только то что прописано в Private Sub Form1_Load или это не так?.

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 4 | Автор: Алексей
Добавлено:31.05.2008 / 17:08
http://Kbyte.Ru/Forum/Show.aspx?id=8239

_________________
Это сообщение добавлено через Kbyte.Ru Forum Mail Conference (FMC)

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 5 | Автор: EROS
Добавлено:31.05.2008 / 17:31
Arti, если речь идет о том приложении, что мы обсуждали ранее, то многопоточность там абсолютно лишняя! Никакой выгоды,кроме дополнительных проблем, ты не получишь. Твоя задача не вписывается в разряд многопоточных.

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 6 | Автор: Arti
Добавлено:31.05.2008 / 21:08
Пожалуй соглашусь, но не на долго :) Когда база вырастит(в частности история в базе) придется подробно разбираться с многопоточностю, делегатами, асинхронностью и т.д :) дабы основная форточка не подтормаживала.

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 7 | Автор: EROS
Добавлено:31.05.2008 / 22:31
придется подробно разбираться с многопоточностю, делегатами, асинхронностью

Поверь на слово.. гораздо бОльший прирост производительности ты получишь от оптимизации БД, индексов, запросов и алгоритмов в программе нежели от использования многопоточности.

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 8 | Автор: Игорь Голов
Добавлено:31.05.2008 / 23:12
Arti, использовать многопоточность - большое искусство.
Иначе масса гимора может появиться.
(как найду статью - выдам тебе на гора.)

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


ListView динамическое обновление | Автор: Arti
Добавлено: 30.05.2008 / 20:26 | ответов: 1 | просмотров: 61

Здравствуйте, скажите возможно ли каким-то образом динамически обновлять ListView из базы данный. Задача в том чтобы сделать это не перезагружая весь лист, чтобы не сбрасывался выбранный Item т.е. выбрали item выписали какое-то количество товара информация сохранилась в базе и затем обновились соответствующие поля данного item-a, можно конечно непосредственно прописать значение свойств Text, но дело в том что в базе производится вычисления этих значений, а писать эти вычисления ещё и в программе смысла тогда от базы особого не будет.

Ответить на это сообщение | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 1 | Автор: Edlin
Добавлено:02.06.2008 / 08:48
Предлагаю с свойстве Tag объектов ListViewItem хранить значение id (первичного ключа) из базы данных. Когда ты получаешь записи из базы данных, то для каждой записи ищешь Item с соответствующим id. Если он найден, обновляешь его поля. Если нет, создаешь новый Item и вставляешь его в коллекцию.

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Наверх

 

Последние статьи

Нестандартная форма
Автор: Zhenik Ipatov | добавлено: 05.05.2008 / 12:42 | просмотров: 256

Первое что бросается в глаза, когда первый раз используешь программу это конечно же её облик, внешний вид. Есть вероятность что если пользователю не понравится внешний вид окна, то он не будет пользоваться продуктом. Значит нам, не побоюсь этого слова, программистам нужно как можно лучше, удобнее, понятнее, красивее и приветливее сделать лицо программы. Нужно как можно эффектнее преподнести программу. С самого первого появления Windows окна получили прямоугольный стандарт и все User Control’ы

Как узнать размер базы данных MySQL через php
Автор: Николай Рудченко | добавлено: 14.02.2008 / 13:01 | просмотров: 744

В этой небольшой статье вы узнаете, как получить размер вашей базы данных (БД) MySQL используя язык программирования PHP.

Взаимодействие с другими сайтами через HTTP (HttpWebRequest и HttpWebResponse)
Автор: Немиро Алексей | добавлено: 27.07.2007 / 14:01 | просмотров: 5459

В данной статье речь пойдет о том, как можно программно заполнить и отправить Web-форму, а также получить результат с использованием довольно простых классов - HttpWebRequest и HttpWebResponse.

Работа с SQL – Запросы
Автор: Хабибулин А. (aka Bille Gates) | добавлено: 22.07.2007 / 04:43 | просмотров: 8942

В данной статье рассмотрены часто используемые SQL-запросы и приведены примеры их использования.

Использование XML.Serialization
Автор: Немиро Алексей | добавлено: 19.07.2007 / 15:38 | просмотров: 2430

В данном обзоре речь пойдет об использование XML.Serialization в .NET и ее применении на примере сохранения и считывания настроек программы с использованием синтаксиса языка Visual Basic .NET.

 

Статьи на Kbyte.Ru

Наверх

 

Интересные коды и решения

Как узнать имя текущего соединения с Интернет?
Дата добавления: 31.07.2006 / 12:53 | просмотров: 1708 | платформа: VB

Программная обработка HTML-элементов управления
Дата добавления: 31.07.2006 / 16:25 | просмотров: 1520 | платформа: ASP .NET (VB)

Поиск слов определенной длины
Дата добавления: 24.03.2007 / 11:02 | просмотров: 1437 | платформа: RegEx

Как программно изменить тему страницы?
Дата добавления: 31.07.2006 / 13:40 | просмотров: 1804 | платформа: ASP .NET (VB)

Анализ даты стандарта MM/DD/YYYY и MM/DD/YY
Дата добавления: 24.03.2007 / 10:59 | просмотров: 1412 | платформа: RegEx

Как создать новую папку (каталог) с использованием API?
Дата добавления: 31.07.2006 / 12:37 | просмотров: 1645 | платформа: VB

Как создать новую папку (каталог)?
Дата добавления: 31.07.2006 / 12:36 | просмотров: 2750 | платформа: VB

Как узнать IP-адрес посетителя?
Дата добавления: 01.09.2006 / 12:23 | просмотров: 3263 | платформа: ASP .NET (VB)

Как узнать размер открытого файла?
Дата добавления: 31.07.2006 / 12:43 | просмотров: 1469 | платформа: VB

Как можно скрыть курсор мышки?
Дата добавления: 16.08.2006 / 19:48 | просмотров: 1545 | платформа: VB

 

Универсальные коды на Kbyte.Ru

Наверх

 

Юмор на Kbyte.Ru

Cантехник ковыряется в унитазе. Прочищает засор типа... Вдруг замечает, что за ним наблюдает мальчик.
- Что мальчик, неприятно? Это тебе, панимашшь, не в Интернете копаться...

 

Рейтинг: 327
Всего голосов: 519
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

 

Стоят три вампира. Один говорит:
- Вон видите то дерево? За ним деревня. Сейчас я там всех убью.
Возвращается, все пятки в крови.
Второй вампир говорит:
- Вон видите то дерево? Сейчас там всех убью!
Возвращается, по пояс в крови.
Третий говорит:
- Сейчас что будет!!!
Возвращается, весь в крови.
Его спрашивают:
- Как ты это сделал?
Он им отвечает:
- Вон видите то дерево? А Я ЕГО НЕ УВИДЕЛ!!!

 

Рейтинг: 416
Всего голосов: 599
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

 

Три способа, которыми советские программисты достают программное обеспечение: воровство, грабеж, и обмен награбленным.

 

Рейтинг: 290
Всего голосов: 461
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

 

- Где находятся мухи зимой?
- Не знаю, но мне хотелось бы, чтобы они оставались там и летом!

 

Рейтинг: 384
Всего голосов: 565
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

 

- Чем же объяснить, что ты не умер, когда тебе прострелили грудь?
- Тем, что у меня в эту минуту сердце ушло в пятку.

 

Рейтинг: 314
Всего голосов: 432
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

 

Вовочка спрашивает:
- Папа презервативы рвутся?
- Посмотри в зеркало!

 

Рейтинг: 213
Всего голосов: 362
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

 

Вовочка приехал к дедушке в деревню. Однажды днем к деду пришли гости,
тут Вовочка вбегает в дом и орет: "Там в поле бык @*ет корову!"
Дед покраснел, говорит: "Вовочка, не ругайся так, скажи лучше, мол бык
удивляет корову." Вовочка ушел, прибегает через пол-часа, орет: "Там в
поле бык удивляет всех коров!" Дед ему отвечает:
"Вовочка, бык не может удивлять одновременно больше одной коровы."
Вовочка отвечает:
- Нет может, нет может! Потому что он @б%т лошадь!

 

Рейтинг: 273
Всего голосов: 419
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

 

Выигpай Сyпеpпpиз!
Собеpи 15 чyгyнных кpышек с бyквой M от водосточных люков - и полyчи пи#$%лей от pаботников Мосводоканала!

 

Рейтинг: 189
Всего голосов: 324
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

 

У компании Microsoft появилась новая услуга.
Они предлагают рекламное место в сообщениях об ошибках программы.

 

Рейтинг: 365
Всего голосов: 553
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

 

Заходит наркоман в телефонную будку и начинает там мочиться. Стоящая рядом женщина, возмущенная увиденным, кричит на него:
– Как вам не стыдно?! Немедленно выходите!
Наркоман говорит:
– Вот, блин! В женский попал!

 

Рейтинг: 1175
Всего голосов: 1681
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

 

Весь юмор на Kbyte.Ru

Наверх


Выпуск подготовил: R-KDR-19826

Редактор: Немиро Алексей

Copyright (c) Nemiro AS, 2005-2007


В избранное