Модераторы: diadiavova, gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Класс для работы с базами данных 
:(
    Опции темы
Witalij
Дата 23.11.2006, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 28.10.2006

Репутация: нет
Всего: нет



Народ, я в отчаянии. Может кто поможет, уже три недели бьюсь и не выходит.
Есть класс которому передается имя DataGridView, SQL - запрос и имя провайдера баз данных. Сам класс приведен ниже. Вызов осуществляется следующим образом:

Код

Dim DFG As DataForGrid = New DataForGrid
DFG.ConString = "Provider=Microsoft.Jet.OLEDB.4.0;DATA Source=d:\Stud2.mdb"
DFG.SQL = "Select * from Студенты"
DFG.GetConection(Me.DataGridView1)


Данные выводятся в DataGrid на ура и быстро и без геммороя. Но никак не могу додуматься как доработать класс что-бы изменении данных в DataGrid, они изменялись в базе данных.
Особо не пинайте, в VB.net я еще новичок, в литературе в основном приводилось примеры использования баз данных через мастеров. Мне же нужно чтобы подключение, изменение и т.д. происходило программно, т.к. в базе используется несколько таблиц.



Код

Public Class DataForGrid
    'Закрытые свойства
    Private pSQL As String
    Private pConString As String
    'Открытые свойства

    Property SQL() As String
        Get
            Return pSQL
        End Get
        Set(ByVal value As String)
            pSQL = value
        End Set
    End Property

    Property ConString() As String
        Get
            Return pConString
        End Get
        Set(ByVal value As String)
            pConString = value
        End Set
    End Property

    Public Function GetConection(ByVal Grid As DataGridView, Optional ByVal ConSQL As String = "", Optional ByVal ConString As String = "") As Boolean
        Try
            If ConSQL = "" Then ConSQL = pSQL
            If ConString = "" Then ConString = pConString
            Dim Data As New DataSet
            Dim Adapter As New OleDb.OleDbDataAdapter(ConSQL, ConString)
            Adapter.Fill(Data, "DataTable")
            Grid.DataSource = Data
            Grid.DataMember = "DataTable"
            GetConection = True
        Catch ex As Exception
            MessageBox.Show(ex.Message.ToString, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error)
            GetConection = False
        End Try
    End Function
End Class




Это сообщение отредактировал(а) Exception - 23.11.2006, 19:34
PM MAIL   Вверх
Naum
Дата 23.11.2006, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 743
Регистрация: 7.9.2005
Где: Саратов, ул. Поса дского, 298

Репутация: 2
Всего: 15



1. Имхо, адаптер должен быть полем класса. А не переменной в какой-то процедуре.
2. С DataSet тоже самое. 
3. 

Цитата(Witalij @  23.11.2006,  14:56 Найти цитируемый пост)
как доработать класс что-бы изменении данных в DataGrid, они изменялись в базе данных.

Добавить в класс метод, например Update(). Примерно с таким кодом
Код

if Data.HasChanges then
  Adapter.Update(Data)
end if


Чуть не забыл самое главное. У Adaptera кроме SelectCommand должны быть еще UpdateCommand, InsertCommand, DeleteCommand.

Добавлено @ 16:13 
Если что не понятно спрашивай. Не могу собраться с мыслями. Голова квадратная.


--------------------
У нас всего два праздника Новый год и ТЯПница.
PM MAIL ICQ   Вверх
Witalij
Дата 23.11.2006, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 28.10.2006

Репутация: нет
Всего: нет



Цитата(Naum @ 23.11.2006,  16:12)
1. Имхо, адаптер должен быть полем класса. А не переменной в какой-то процедуре.
2. С DataSet тоже самое. 
3. 

Цитата(Witalij @  23.11.2006,  14:56 Найти цитируемый пост)
как доработать класс что-бы изменении данных в DataGrid, они изменялись в базе данных.

Добавить в класс метод, например Update(). Примерно с таким кодом
Код

if Data.HasChanges then
  Adapter.Update(Data)
end if


Чуть не забыл самое главное. У Adaptera кроме SelectCommand должны быть еще UpdateCommand, InsertCommand, DeleteCommand.

А что эти команды делают?

Добавлено @ 16:13 
Если что не понятно спрашивай. Не могу собраться с мыслями. Голова квадратная.

Извини что допекаю.

А поподробнее можно? или хотя бы примеры привести или адреса сайтов, где можно почитать. Желательно с примерами. smile 
PM MAIL   Вверх
thomas
Дата 24.11.2006, 02:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент... почти
***


Профиль
Группа: Завсегдатай
Сообщений: 1385
Регистрация: 3.10.2006
Где: " Сказочное королевство"

Репутация: 3
Всего: 65



Witalij, 
Привет.
С DataSet и  DataAdapter не так уж и сложно.
Вместо того чтобы обьявлять их в одной функции, ты обьяви их глобально в классе, там где и 
    'Закрытые свойства
    Private pSQL As String
    Private pConString As String
Просто допиши 
    Private Data As  New DataSet
    Private Adapter As  OleDb.OleDbDataAdapter()

А в функции соответственно присваивай им значения и заполняй данными

Adapter=New OleDb.OleDbDataAdapter(ConSQL, ConString)
Adapter.Fill(Data, "DataTable")
Grid.DataSource = Data
Grid.DataMember = "DataTable"

Обьявив DataSet и DataAdapter глобально в классе, ты можешь использовать их во всех функциях и методах класса.
А для обновления твоей БД нужно добавить переменную(поле) OleDbCommand.
Dim сmd As OleDbCommand.
Что бы потом использовать cmd.ExecuteNonQuery() в отдельном методе обновления БД.

Пишешь sql соманду на обновление полей БД, присваиваешь этот sql свойству команды
cmd.CommandText=sql
а далее как обычно
cmd.Connection= твое соединение
твое соединение.Open()
cmd.ExecuteNonQuery()
твое соединение.Close()

a sql что-то типа такого
sql= "UPDATE  table SET fild1=valueNew WHERE fild1=valueOud AND fildID=xxxx-yy"

А посмотреть можно в MSDN
Обрати внимание на "оглавление" в левой панели

Успехов.  smile 

ЗЫ завтра днем подскажу еще подробнее.


--------------------
Крепко жму горло, искренне ваш Thomas. (С)vingrad
Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну!
Проблемы негров шерифа не волнуют.
PM MAIL   Вверх
Witalij
Дата 24.11.2006, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 28.10.2006

Репутация: нет
Всего: нет



Цитата(thomas @  24.11.2006,  02:09 Найти цитируемый пост)
Обрати внимание на "оглавление" в левой панели

Успехов.   

ЗЫ завтра днем подскажу еще подробнее.


Если можно, то подскажи подробнее. А можно обойтись без SQL запроса на обновление базы. В одном примере я нашел обновление происходит через адаптер (OleDbDataAdapter1.Update(DataSet11)) и обновляется все нормально. Правда тот DataSet был создан через мастер.
PM MAIL   Вверх
Naum
Дата 24.11.2006, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 743
Регистрация: 7.9.2005
Где: Саратов, ул. Поса дского, 298

Репутация: 2
Всего: 15



Цитата(Witalij @  24.11.2006,  11:15 Найти цитируемый пост)
Если можно, то подскажи подробнее. А можно обойтись без SQL запроса на обновление базы. В одном примере я нашел обновление происходит через адаптер (OleDbDataAdapter1.Update(DataSet11)) и обновляется все нормально. Правда тот DataSet был создан через мастер.

Можно. Для этого после

Adapter=New OleDb.OleDbDataAdapter(ConSQL, ConString)

добавить

Adapter.UpdateCommand=cmd.

Еще можно посмотреть, что нагенерил мастер. Если собираешься вносить изменения в базу, то, ИМХО, наряду с UpdateCommand должны быть и InsertCommand и DeleteCommand. Если пишешь эти команды ручками не плохо бы знать SQl.



--------------------
У нас всего два праздника Новый год и ТЯПница.
PM MAIL ICQ   Вверх
Witalij
Дата 24.11.2006, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 28.10.2006

Репутация: нет
Всего: нет



Народ, может кто-нибудь киданет на мыло (вырезано модератором) исходники. Может у кого-нибудь есть какие-либо наработки. Нужно лишь подключение базы данных, вывод DataGridView, и сохранение изменений в нем. Попытаюсь в них разобраться. И желательно подключение через АДО.


M
Exception
Модератор: все решения выкладываются на форуме. Не просите участников пересылать ответы на e-mail.


Это сообщение отредактировал(а) Exception - 27.11.2006, 16:15
PM MAIL   Вверх
thomas
Дата 24.11.2006, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент... почти
***


Профиль
Группа: Завсегдатай
Сообщений: 1385
Регистрация: 3.10.2006
Где: " Сказочное королевство"

Репутация: 3
Всего: 65



Вот тебе пример как обновляя Грид, обновлять БД.

Извини что на C#. Но в принципе это не принципиально, логика и команды теже, только написано чуть-чуть по другому. (Sub=void)  smile 


Присоединённый файл ( Кол-во скачиваний: 25 )
Присоединённый файл  Oef09_dbBis3_.zip 45,61 Kb


--------------------
Крепко жму горло, искренне ваш Thomas. (С)vingrad
Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну!
Проблемы негров шерифа не волнуют.
PM MAIL   Вверх
Witalij
Дата 27.11.2006, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 28.10.2006

Репутация: нет
Всего: нет



Thomas, спасибо. Разобрался, все работает. Теперь буду класс изменять.
PM MAIL   Вверх
Naum
Дата 27.11.2006, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 743
Регистрация: 7.9.2005
Где: Саратов, ул. Поса дского, 298

Репутация: 2
Всего: 15



thomas, +1.


--------------------
У нас всего два праздника Новый год и ТЯПница.
PM MAIL ICQ   Вверх
thomas
Дата 27.11.2006, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент... почти
***


Профиль
Группа: Завсегдатай
Сообщений: 1385
Регистрация: 3.10.2006
Где: " Сказочное королевство"

Репутация: 3
Всего: 65



Witalij, 
Привет.
Вот сваял тут в выходные, некоторое подобие универсального класса

Код

Imports System.Data
Imports System.Data.OleDb
''' <summary>
''' Класс для доступа к базе данных Access
''' </summary>
''' <remarks>Класс содержит методы для отображения и модификации данных в таблицах ДБ</remarks>
Public Class AccessToDB

#Region "Переменные в классе"
    'declaration
    Private dbCon As OleDbConnection
    Private dbCmd As OleDbCommand
    Private dbDa As OleDbDataAdapter
    Private dbCmdBuilder As OleDbCommandBuilder
    Private ds As DataSet
    Private dr As DataRow
    Private dt As DataTable
    Private dv As DataView
    Private conStr As String
#End Region

#Region "Конструкторы класса"
    'constructors
    Public Sub New()
        conStr = "provider=microsoft.jet.oledb.4.0; data source=" + "D:\vti\Margo\nwind.mdb"
        ' этот конструктор в принципе не нужен, пользовал его для тестирования этой определенной базы.
        ' второй конструктор универсален, он может создать экзкмпляр класса для различных БД 
    End Sub
    ''' <summary>
    ''' 
    ''' </summary>
    ''' <param name="mdb">Полный путь к файлу базы данных Access</param>
    ''' <remarks>При создании экземпляра класса инициируется соединение с указанной Базой Данных</remarks>
    Public Sub New(ByVal mdb As String)
        conStr = "provider=microsoft.jet.oledb.4.0; data source=" + mdb
        initiateMdb()
    End Sub
#End Region

#Region "Методы класса"
    'methode
    Private Sub initiateMdb()
        Try
            dbCon = New OleDbConnection()
            dbCon.ConnectionString = conStr
            dbCmd = New OleDbCommand()
            dbCmd.Connection = dbCon
            dbDa = New OleDbDataAdapter(dbCmd)
            ds = New DataSet()
        Catch ex As Exception
            System.Windows.Forms.MessageBox.Show(ex.Message, "Ошибка при инициации доспупа к БД!")
        End Try
    End Sub

    ''' <summary>
    ''' Инициация таблицы в ДатаСет
    ''' </summary>
    ''' <param name="tableName">Имя таблицы, создаваемой в DataSet</param>
    ''' <param name="sql">SQL-команда для выборки данных из всех или определённых полей для заданной таблицы.</param>
    ''' <remarks>Здесь используется невыполнимое условие для создания пустой таблицы в ДатаСет, но с полями. ("Шапка" таблицы)</remarks>
    Public Sub initiateDataSet(ByVal tableName As String, ByVal sql As String)
        sql = sql.Replace(";", "")
        dbCmd.CommandText = sql + " where 1=0;"
        dbDa.Fill(ds, tableName)
    End Sub

    ''' <summary>
    ''' Метод для заполнения данными таблицы в ДатаСет
    ''' </summary>
    ''' <param name="tableName">Имя таблицы в ДатаСет, в которую будут добавлены данные.</param>
    ''' <param name="sql">SQL-команда определяющая данные которые будут добавлены.</param>
    ''' <remarks></remarks>
    Public Sub fillDataSet(ByVal tableName As String, ByVal sql As String)
        ds.Tables(tableName).Clear()
        dbCmd.CommandText = sql
        dbDa.Fill(ds, tableName)
    End Sub

    ''' <summary>
    ''' Метод для заполнения данными таблицы в ДатаСет
    ''' </summary>
    ''' <param name="tableName">Имя таблицы в ДатаСет, в которую будут добавлены данные.</param>
    ''' <param name="sql">SQL-команда определяющая данные которые будут добавлены.</param>
    ''' <param name="isnew">Значение - False, таблица уже существует и будет очищена от значений.</param>
    ''' <remarks></remarks>
    Public Sub fillDataSet(ByVal tableName As String, ByVal sql As String, ByVal isnew As Boolean)
        If isnew = False Then
            ds.Tables(tableName).Clear()
        End If
        dbCmd.CommandText = sql
        dbDa.Fill(ds, tableName)
    End Sub

    ''' <summary>
    ''' Метод выполнения SQL-команды
    ''' </summary>
    ''' <param name="sql">SQL-команда для выполнения</param>
    ''' <remarks></remarks>
    Public Sub doNonQuery(ByVal sql As String)
        Try
            dbCon.Open()
            dbCmd.CommandText = sql
            dbCmd.ExecuteNonQuery()
            dbCon.Close()
        Catch ex As Exception
            System.Windows.Forms.MessageBox.Show(ex.Message, "Ошибка при выполнении запроса к БД!")
        Finally
            dbCon.Close()
        End Try
    End Sub

    ''' <summary>
    ''' Метод обновления данных таблицы в Базе Данных
    ''' </summary>
    ''' <param name="tableName">Имя таблицы в ДатаСет, в которой будут обновлены данные.</param> 'in DataSet of in DataBase???
    ''' <remarks></remarks>
    Public Sub upDateTable(ByVal tableName As String)
        Dim count As Integer
        dbCmdBuilder = New OleDbCommandBuilder(dbDa)
        If ds.HasChanges(DataRowState.Modified) = True Then
            dbDa.UpdateCommand = dbCmdBuilder.GetUpdateCommand()
            Try
                count = dbDa.Update(ds, tableName)
                ds.Tables(tableName).AcceptChanges()
            Catch ex As Exception
                System.Windows.Forms.MessageBox.Show(ex.Message, "Ошибка при обновлении таблицы в ДС!")
            End Try
        End If
    End Sub

    ''' <summary>
    ''' Функция получения отфильтрованных данных из таблицы в ДатаСете, которые отвечают заданному условию.
    ''' </summary>
    ''' <param name="tableName">Имя таблицы в ДатаСет, данные из которой будут фильтроваться.</param>
    ''' <param name="condition">Условие по которому будут фильтроваться строки в таблице.</param>
    ''' <returns>DataViev с отфильтрованными по условию строками заданной таблицы в DataSet</returns>
    ''' <remarks>В качестве условия выступает имя поля в таблице, оператор сравнения или равенства и значение для сравнения.
    ''' Например: "birthdate>='1/1/1963'" - осуществляется выборка всех строк где значение указанного поля равно или больше 
    ''' указанной даты; "city='London'" - все из Лондона; "title like '%rep%'" - где обращение похоже на "rep".</remarks>
    Public Function showData(ByVal tableName As String, ByVal condition As String) As DataView
        dv = New DataView()
        dv.Table = ds.Tables(tableName)
        dv.RowFilter = condition
        Return dv
    End Function

    ''' <summary>
    ''' Функция получения отфильтрованных данных из таблицы в ДатаСете, которые отвечают заданному условию.
    ''' </summary>
    ''' <param name="tableName">Имя таблицы в ДатаСет, данные из которой будут фильтроваться.</param>
    ''' <param name="condition">Условие по которому будут фильтроваться строки в таблице.</param>
    ''' <param name="fieldName">Имя поля в таблице, по которому выполняется сортировка. Сортировка по возрастанию.</param>
    ''' <returns>DataViev с отфильтрованными и отсортированными по условиям строками заданной таблицы в DataSet</returns>
    ''' <remarks></remarks>
    Public Function showData(ByVal tableName As String, ByVal condition As String, ByVal fieldName As String) As DataView
        dv = New DataView()
        dv.Table = ds.Tables(tableName)
        dv.RowFilter = condition
        dv.Sort = fieldName + " asc"
        Return dv
    End Function

    ''' <summary>
    ''' Метод создания таблицы в Базе Данных
    ''' </summary>
    ''' <param name="createStr">SQL команда создания таблицы в Базе Данных</param>
    ''' <param name="tableName">Имя создаваемой таблицы, для проверки на наличие такой таблицы.</param>
    ''' <remarks>Если в Базе данных существует такая таблица, то она удаляется.</remarks>
    Public Sub createTable(ByVal createStr As String, ByVal tableName As String)
        'если такая таблица есть, то выскочит исключение.
        Try
            dbCon.Open()
            dbCmd.CommandText = createStr
            dbCmd.ExecuteNonQuery()
        Catch ex As Exception
            System.Windows.Forms.MessageBox.Show(ex.Message, "Ошибка при создании таблицы в ДБ!")
        Finally
            dbCon.Close()
        End Try
    End Sub

#End Region

#Region "Свойства класса"
    'property
    Public ReadOnly Property status() As ConnectionState
        Get
            Return dbCon.State
        End Get
    End Property

    Public ReadOnly Property myDs() As DataSet
        Get
            Return ds
        End Get
    End Property
#End Region

End Class


Обращаюсь ко всем.
Какие будут пожелания для расширения функциональности данного класса, и какие коментарии и как следует исправить.
И вообще здоровая критика приветствуется. Ведь многие здесь еще учаться. А в процессе учёбы очень важно обсуждение  рациональности и целесообразности того или иного решения. 
Заранее всем спасибо.

Тут пример использования этого класса. Сделано в VS2005.

ЗЫ архив с базой выложить не получиться, он больше 120Кв.
     но думаю у всех есть эта стандартная учебная база Northwind



Это сообщение отредактировал(а) thomas - 27.11.2006, 13:20

Присоединённый файл ( Кол-во скачиваний: 15 )
Присоединённый файл  DataAccess.zip 66,46 Kb


--------------------
Крепко жму горло, искренне ваш Thomas. (С)vingrad
Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну!
Проблемы негров шерифа не волнуют.
PM MAIL   Вверх
Witalij
Дата 27.11.2006, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 28.10.2006

Репутация: нет
Всего: нет



В двойне огромное спасибо, Thomas. Буду разбираться с твоим классом.
PM MAIL   Вверх
Witalij
Дата 1.12.2006, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 28.10.2006

Репутация: нет
Всего: нет



Thomas, с твоим классом я разобрался. Огромное спасибо. Вот только есть некоторые вопросы:
Может кто сможет ответить. 
Загрузка в datagridview 700 записей происходит где то около 2 сек (при этом у меня 35 полей). Но если применяю AutoResizeColumns. То тормоза увеличиваются где-то до 15-20 секунд. 
Может что-то делаю не так?
Или сам DataGrid тормозит. Интересно в других языках будут такие-же тормоза?
PM MAIL   Вверх
Naum
Дата 1.12.2006, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 743
Регистрация: 7.9.2005
Где: Саратов, ул. Поса дского, 298

Репутация: 2
Всего: 15



Скорее всего такие тормоза будут везде. Для этого частенько используется постраничный вывод записей. Пример, для Framework 1.1 можно посмотреть здесь.


--------------------
У нас всего два праздника Новый год и ТЯПница.
PM MAIL ICQ   Вверх
thomas
Дата 3.12.2006, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент... почти
***


Профиль
Группа: Завсегдатай
Сообщений: 1385
Регистрация: 3.10.2006
Где: " Сказочное королевство"

Репутация: 3
Всего: 65



Привет всем.
Я тут кое-что подправил и добавил в класс.

В методе UpDateTable изменил условие на
Код

If ds.HasChanges(DataRowState.Modified  Or DataRowState.Added) = True Then

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

Плюс добавил Функцию для создания строки в таблице и Mетод добавления заполненной строки в таблицу.
Код

' в классе
Public Function CreateRow(ByVal tableName As String) As DataRow
        dt = ds.Tables(tableName)
        dr = dt.NewRow()
        Return dr
    End Function

 Public Sub AddRow(ByVal dr As DataRow, ByVal tableName As String)
        ds.Tables(tableName).Rows.Add(dr)
    End Sub

' как используем на форме

Dim dr As DataRow
dr = myDB.CreateRow("dsTabel")
' myDB экземпляр нашего класса
'заполняем значениями поля строки. Конечно можно и из контролов.
dr("myid") = 1004
dr("myName") = "Василий Пупкин"
dr("myAdres") = "Советская 13, Бобруйск"
dr("myType") = 55.45
'теперь добавим заполненую строку в таблицу
myDB.AddRow(dr, "dsTabel")


Кому интересно, я так же переделал этот класс под SqlDataBase  на Sql Server-е
Там практически тоже самое и плюс еще добавлены методы для Stored Procedure



--------------------
Крепко жму горло, искренне ваш Thomas. (С)vingrad
Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну!
Проблемы негров шерифа не волнуют.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума VB .NET
diadiavova
  • Прежде чем задать вопрос, воспользуйтесь поиском: возможно Ваш вопрос уже обсуждался и на него был получен ответ.
  • Если такой же вопрос не найден, не стоит задавать свой вопрос в любую тему, создайте новую.
  • Заголовок темы должен отображать ее суть.
  • Содержание поста должно описывать проблему понятно, но в то же время, по возможности, лаконично. Сначала следует описать суть вопроса, потом можно привести пример кода, не вынуждайте других участников угадывать в чем Ваша проблема - телепатов здесь нет.
  • Будьте взаимно вежливы и дружелюбны.
  • При оформлении сообщений используйте форматирование, примеры кода заключайте в теги [CODE=vbnet][/CODE].
  • Также ознакомьтесь с общими правилами, действующими на всем форуме.
  • Если вопрос решен, не забывайте помечать тему решенной(вверху темы есть ссылка). Кроме того, если Вы хотите отблагодарить участников, оказавших помощь в решении, можно повысить им репутацию, в случае, если у Вас менее 100 сообщений в форуме и функция изменения репутации Вам недоступна, можете написать сюда.
  • Общие вопросы по программированию на платформе .NET обсуждаются здесь.
  • Литература по VB .NET обсуждается здесь.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, diadiavova.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0592 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.