Первый раз в 10 класс вопросы по синтаксису и SharpDevelop

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

Ноябрь
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 23
Зарегистрирован: 05.11.2007 (Пн) 10:22

Первый раз в 10 класс вопросы по синтаксису и SharpDevelop

Сообщение Ноябрь » 05.11.2007 (Пн) 10:43

Надо быстро научиться программировать на VB и написать интерфейс базы данных (ну это ладно..)
С самого начала SharpDevelop создал 3 файла
AssemblyInfo.vb
MainForm.vb
MainForm.Designer.vb
Program.vb
В общем некие тонкости я уже понял, в частности то, что нужно писать в MainForm.Designer.vb, точнее, что ничего не нужно писать, т.к это статичный интерфейс программы, который отображается в закладке дизайн..
А для чего этот код?
Код: Выделить всё
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
   If disposing Then
      If components IsNot Nothing Then
         components.Dispose()
      End If
   End If
   MyBase.Dispose(disposing)
End Sub


Далее..
На сколько я понял, основной текст программы должен находиться в Program.vb
(кусок)
Код: Выделить всё
Dim i as Integer
Dim k As Integer
k=10

Dim al() As Object
ReDim al(k)
         
For i = 0 To k-1
            
   al(i) = new Label()
   al(i).Text=(i)
   al(i).Location = New System.Drawing.Point(10, 10+10*i)
   Me.MainForm.Controls.Add(al(i))
      
Next
Т.о хочу вывести 10 лейблов, но на панели отображается только первый.. почему?

Простите, что не смог найти ответы на свои вопросы самостоятельно.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 05.11.2007 (Пн) 11:58

Хе-хе... не там тему создал.
З.Ы. Уполномоченные, переместите тему по месту назначения.
З.З.Ы. Код нужен для корректного удаления объектов из памяти. Второй кусок, вырванный из контекста ни о чем не говорит.
Весь мир матрица, а мы в нем потоки байтов!

Thomas
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 246
Зарегистрирован: 12.11.2005 (Сб) 0:17
Откуда: "Сказочное королевство"

Сообщение Thomas » 05.11.2007 (Пн) 12:57

Ноябрь
Надо быстро научиться программировать на VB

Для этого нужно хотя бы книжку купить про VB.NET 2005.
Тогда многие "начальные" вопросы отпадут сами собой.

Из названия темы и первого поста мало что понял, за исключением вопроса на который ответил Viper. А вот это
написать интерфейс базы данных

вызвало вообще недоумение. :shock:
Что под этим подразумевается?
Met vriendelijke groetjes
VS2008 Pro FW3.5 SP1

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 05.11.2007 (Пн) 12:59

Thomas писал(а):А вот это
написать интерфейс базы данных

вызвало вообще недоумение. :shock:
Что под этим подразумевается?


Написать прогу, которая будет работать с БД

Thomas
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 246
Зарегистрирован: 12.11.2005 (Сб) 0:17
Откуда: "Сказочное королевство"

Сообщение Thomas » 05.11.2007 (Пн) 13:03

Ramzes
Спасибо за подсказку. Что-то с утра у меня туго с абстрактным мышлением. :oops:

Ноябрь
Если нужна будет помощь в написании программы работающей с базой данных (Access или MS SQL server) обращайтесь. Помогу по возможности.
Met vriendelijke groetjes
VS2008 Pro FW3.5 SP1

Ноябрь
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 23
Зарегистрирован: 05.11.2007 (Пн) 10:22

Сообщение Ноябрь » 05.11.2007 (Пн) 13:26

Если нужна будет помощь в написании программы работающей с базой данных (Access или MS SQL server) обращайтесь. Помогу по возможности.
Спасибо. Обращаться здесь или в личку..?

Второй кусок, вырванный из контекста ни о чем не говорит.

А так?

Код: Выделить всё
Imports Microsoft.VisualBasic.ApplicationServices

Namespace My
   ' This file controls the behaviour of the application.
   Partial Class MyApplication
      Public Sub New()
         MyBase.New(AuthenticationMode.Windows)
         Me.IsSingleInstance = False
         Me.EnableVisualStyles = True
         Me.SaveMySettingsOnExit = False ' MySettings are not supported in SharpDevelop.
         Me.ShutDownStyle = ShutdownMode.AfterMainFormCloses
      End Sub
      
      Protected Overrides Sub OnCreateMainForm()
         
         Me.MainForm = My.Forms.MainForm
         
         Dim i as Integer
         Dim k As Integer
         k=10
         
         Dim al() As Object
         ReDim al(k)
         
         For i = 0 To k-1
            
            al(i) = new Label()
            al(i).Text=(i)
            al(i).Location = New System.Drawing.Point(10, 10+10*i)
            Me.MainForm.Controls.Add(al(i))
            
         Next
         
      End Sub
   End Class
End Namespace


Для этого нужно хотя бы книжку купить про VB.NET 2005.
Книжка хорошо, но попробую обойтись он-лайн мануалами, хелпами и пр.. т.к. опыт программирования уже есть, попробую найти аналогию, а там видно будет.

Thomas
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 246
Зарегистрирован: 12.11.2005 (Сб) 0:17
Откуда: "Сказочное королевство"

Сообщение Thomas » 05.11.2007 (Пн) 15:55

Ноябрь
Как вам будет удобно.
:)
Met vriendelijke groetjes
VS2008 Pro FW3.5 SP1

Ноябрь
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 23
Зарегистрирован: 05.11.2007 (Пн) 10:22

Сообщение Ноябрь » 06.11.2007 (Вт) 8:37

На локальном компьютере установлена mysql база данных (для определенности та, которая поставляется с базовым комплектом денвера), как с помощью VB выбрать все данные одной таблицы и отобразить их на экране?

посмотрел тут..
http://msdn.microsoft.com/library/rus/d ... wsform.asp
мдя.. непривычно, ожидал что-то вроде http://mooska.pl/forum/viewtopic.php?p=4#4
таки придется ставить VS, иначе этот хелп мне врядли поможет..
Выглядит даже просто.. ничего писать почти не надо..

А что если не будет SQL Server?

П.с
Спасибо за совет на винограде, занес статью в избранное, может и пригодится.

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 06.11.2007 (Вт) 14:14

Значит так, для mySql нуна качать библиотеку (можно поиском по форуму, тут было, я задавал вопрос

для MS Sql ничего качать не нужно просто используем пространство имен SqlClient

код тот-же, класы похожи по именам отличаеться только началоа названия

Ноябрь
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 23
Зарегистрирован: 05.11.2007 (Пн) 10:22

Сообщение Ноябрь » 06.11.2007 (Вт) 16:24

http://bbs.vbstreets.ru/viewtopic.php?p ... 29bc2dc14a

вот например, мне нужен ADODB драйвер?

Ноябрь
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 23
Зарегистрирован: 05.11.2007 (Пн) 10:22

Сообщение Ноябрь » 07.11.2007 (Ср) 9:03

Код: Выделить всё
Imports Microsoft.VisualBasic.ApplicationServices
imports System.Data.Odbc

Namespace My
   ' This file controls the behaviour of the application.
   Partial Class MyApplication
      Public Sub New()
         MyBase.New(AuthenticationMode.Windows)
         Me.IsSingleInstance = False
         Me.EnableVisualStyles = True
         Me.SaveMySettingsOnExit = False ' MySettings are not supported in SharpDevelop.
         Me.ShutDownStyle = ShutdownMode.AfterMainFormCloses
      End Sub
      
      Protected Overrides Sub OnCreateMainForm()
         
         Me.MainForm = My.Forms.MainForm
         
         Dim cnl As New ADODB.Connection 'Ошибка(BC30002)
         Dim rsl As New Recordset 'Ошибка(BC30002)
         Dim strServer As String
         Dim strDatabase As String
         Dim strUser As String
         Dim strPassword As String
         Dim conString As String
         Dim strQuerry as String
         
         strServer = "localhost"
         strDatabase = "tsdb"
         strUser = "root"
         strPassword = "***"
         
         conString = "DRIVER={MySQL ODBC 3.51 Driver};SERVER=" & strServer & ";PORT=3306;DATABASE=" & strDatabase & ";USER=" & strUser & ";PASSWORD=" & strPassword & ";OPTION=3;"
         cnl.Open conString 'Ошибка(BC30800)
         strQuerry = "CREATE TABLE sometable (somerecord TEXT);"
         rsl.Source = strQuerry
         Set rsl.ActiveConnection = cnl 'Ошибка(BC30807)
         rsl.Open
         
      End Sub
   End Class
End Namespace


Выводит 4 ошибки..
Что не верно?
Odbc к проекту подключил

Thomas
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 246
Зарегистрирован: 12.11.2005 (Сб) 0:17
Откуда: "Сказочное королевство"

Сообщение Thomas » 07.11.2007 (Ср) 13:20

Ноябрь

Код: Выделить всё

Dim cnl As New ADODB.Connection 'Ошибка(BC30002)
Dim cnl As New ADODB.Connection() ' скобочки забыл

Прежде чем писать
Код: Выделить всё
cnl.Open conString 'Ошибка(BC30800)
Что бы это значило?
Надо бы соответствующее свойство соединению задать
Код: Выделить всё
cnl.ConnectionString = conString 'а потом его открыть
cnl.Open() 'опять скобочки забыл

Ну и в остальных местах проверь синтаксис.
А то студия: "Моя твоя понимай нету".

ЗЫ а в какой среде ваяем? У меня VS2005Pro FW3.0
Met vriendelijke groetjes
VS2008 Pro FW3.5 SP1

Ноябрь
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 23
Зарегистрирован: 05.11.2007 (Пн) 10:22

Сообщение Ноябрь » 07.11.2007 (Ср) 15:44

Код: Выделить всё
Imports Microsoft.VisualBasic.ApplicationServices
Imports System.Data
Imports System.Data.OleDb
Imports ADODB

Namespace My
   ' This file controls the behaviour of the application.
   Partial Class MyApplication
      Public Sub New()
         MyBase.New(AuthenticationMode.Windows)
         Me.IsSingleInstance = False
         Me.EnableVisualStyles = True
         Me.SaveMySettingsOnExit = False ' MySettings are not supported in SharpDevelop.
         Me.ShutDownStyle = ShutdownMode.AfterMainFormCloses
      End Sub
      
      Protected Overrides Sub OnCreateMainForm()
         
         Me.MainForm = My.Forms.MainForm
         
         Dim cnl As New Connection()
         Dim rsl As New RecordSet()
         Dim strServer As String
         Dim strDatabase As String
         Dim strUser As String
         Dim strPassword As String
         Dim conString As String
         Dim strQuerry as String
         
         strServer = "localhost"
         strDatabase = "test"
         strUser = "root"
         strPassword = "***"
         
         conString = "DRIVER={MySQL ODBC 3.51 Driver};SERVER=" & strServer & ";PORT=3306;DATABASE=" & strDatabase & ";USER=" & strUser & ";PASSWORD=" & strPassword & ";OPTION=3;"
         cnl.ConnectionString = conString
         cnl.Open()

         strQuerry = "SELECT * FROM users"
         rsl = cnl.Execute(strQuerry)
         
         ' Create dataset and data adpater objects
         Dim ds As DataSet = New DataSet("Recordset")
         Dim da As OleDbDataAdapter = New OleDbDataAdapter
         'Call data adapters Fill method to fill data from ADO Recordset to the dataset
         da.Fill(ds, rsl, "id")
         ' Now use dataset
         Me.MainForm.dataGrid1.DataSource = ds.DefaultViewManager 'Ошибка 'dataGrid1' is not a member of 'System.Windows.Forms.Form'
         
      End Sub
   End Class
End Namespace


блин, чувствую уже не много осталось:)

Thomas
ЗЫ а в какой среде ваяем? У меня VS2005Pro FW3.0
Первый раз в 10 класс вопросы по синтаксису и SharpDevelop
:) собственно SharpDevelop 2.2 FW 3.0
VS пока нету, надеюсь будет сегодня, а пока пишу в том, что есть.. еще есть VB 6
Последний раз редактировалось Ноябрь 07.11.2007 (Ср) 17:07, всего редактировалось 1 раз.

Thomas
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 246
Зарегистрирован: 12.11.2005 (Сб) 0:17
Откуда: "Сказочное королевство"

Сообщение Thomas » 07.11.2007 (Ср) 16:56

Ноябрь
А что это за "зверь" RecordSet?
У меня вызывает сомненья следующий кусок вашего кода
Код: Выделить всё

cnl.Open()
strQuerry = "SELECT * FROM users"
rsl.Source = strQuerry 'ЧТО ОЗНАЧАЕТ СИЯ СТРОКА?
rsl.ActiveConnection = cnl
rsl.Open()

Например для создания таблицы в ДатаСет и заполнения ее данными используется метод Fill() ДатаАдаптера, образованного на основании обьекта соединения и команды, скойству текст которой присвоен sql-запрос. Что-то типа такого
Код: Выделить всё

sql = "SELECT * FROM tblUsers"
cmd.CommandText = sql
da.Fill(ds, "users")
Met vriendelijke groetjes
VS2008 Pro FW3.5 SP1

Ноябрь
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 23
Зарегистрирован: 05.11.2007 (Пн) 10:22

Сообщение Ноябрь » 07.11.2007 (Ср) 17:24

сорри, я тут разбираюсь потихоньку и редактирую сообщение..

Ноябрь
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 23
Зарегистрирован: 05.11.2007 (Пн) 10:22

Сообщение Ноябрь » 07.11.2007 (Ср) 18:20

короче, взято вот отсюда
http://www.vbdotnetheaven.com/UploadFil ... ecSet.aspx

Код: Выделить всё
Dim strServer As String = "localhost"
Dim strDatabase As String = "test"
Dim strUser As String = "root"
Dim strPassword As String = "***"

Dim ConnectionString As String = "DRIVER={MySQL ODBC 3.51 Driver};SERVER=" & strServer & ";PORT=3306;DATABASE=" & strDatabase & ";USER=" & strUser & ";PASSWORD=" & strPassword & ";OPTION=3;"
Dim sql As String = "SELECT userID, userName, email From users"
' Create a Connection object and open it
Dim conn As Connection = New Connection
Dim connMode As Integer = ConnectModeEnum.adModeUnknown
conn.CursorLocation = CursorLocationEnum.adUseServer
conn.Open(ConnectionString, "", "", connMode)
Dim cmdType As Integer = CommandTypeEnum.adCmdText
Dim rs As _Recordset = conn.Execute(sql)
' Create dataset and data adpater objects
Dim ds As DataSet = New DataSet("Recordset")
Dim da As OleDbDataAdapter = New OleDbDataAdapter
' Call data adapter's Fill method to fill data from ADO
' Recordset to the dataset
da.Fill(ds, rs, "userID")

Forms.MainForm.dataGrid1.DataSource = ds.DefaultViewManager

Уф…… работает:))
Подытоживая, эту главу изучения VB могу сказать только одно - УЖОСНАХ, чтобы забрать данные из mysql таблицы нужно:
Воспользоваться классом ADO (ADODB)
Послать запрос на драйвер (MySQL ODBC 3.51, который прежде еще надо установить)
Изменить принятые данные с помощью адаптера (OleDB)
Только после этого отобразить их в DataGrid…

Например, чтобы сделать аналогичное во Flex, нужно просто воспользоваться специальном классом.
Хотя, с другой стороны, в полуавтоматическом режиме VS наверно это бы минут 5 заняло..

Что ж едем дальше.
Последний раз редактировалось Ноябрь 08.11.2007 (Чт) 5:29, всего редактировалось 1 раз.

Ноябрь
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 23
Зарегистрирован: 05.11.2007 (Пн) 10:22

Сообщение Ноябрь » 07.11.2007 (Ср) 20:32

Как заполнить dataGridView?

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 07.11.2007 (Ср) 23:43

Присвоить свойству DataSource таблицу (DataTable)
или
Присвоить свойству DataSource DataSet а свойству DataMember таблицу из DataSet-a

Ноябрь
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 23
Зарегистрирован: 05.11.2007 (Пн) 10:22

Сообщение Ноябрь » 08.11.2007 (Чт) 7:17

спасибо:)
хотя мне это и не сразу стало понятно.. :roll:

нашел тут хорошую статью
http://www.rsdn.ru/article/dotnet/DataGridView20.xml
СОВЕТ
В среде Framework 2.0 любую привязку визуального элемента формы к источнику данных настоятельно рекомендуется проводить только через класс-посредник BindingSource. Действуя так, вы просто не можете проиграть. В самом крайнем случае вы получите просто избыточную функциональность новообразованной связи, что, понятно, много лучше ее дефицита. Поэтому отныне вашим девизом должен стать: "Говорим Data Binding – подразумеваем BindingSource".


только мля.. это не visual basic вдруг понял я:))

Код: Выделить всё
DataGridViewTextBoxCell txtCell =
  (DataGridViewTextBoxCell)_grid.Rows[4].Cells[2];
txtCell.Value = "Great!";

Как такое в VB записать?

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Сообщение Nord777 » 08.11.2007 (Чт) 9:13

Код: Выделить всё
    Dim txtCell As DataGridViewTextBoxCell = _grid.Rows(4).Cells(2)
    txtCell.Value = "Great!"
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

Ноябрь
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 23
Зарегистрирован: 05.11.2007 (Пн) 10:22

Сообщение Ноябрь » 08.11.2007 (Чт) 9:46

точно, пасиб:)

Ноябрь
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 23
Зарегистрирован: 05.11.2007 (Пн) 10:22

Сообщение Ноябрь » 08.11.2007 (Чт) 10:48

Чтобы заполнить DataGridViewComboBoxCell нужно:

Код: Выделить всё
Dim delmenu As DataGridViewComboBoxCell = New DataGridViewComboBoxCell()
delmenu.Items.AddRange(New Object() {"Удалить", "Редактировать"})
Dim del As DataGridViewComboBoxColumn = New DataGridViewComboBoxColumn()
del.CellTemplate = delmenu


при этом изначально выбрано пустое поле, например в comboBox можно заполнить свойство text, и тогда это поле будет не пустое, а как здесь?
Последний раз редактировалось Ноябрь 09.11.2007 (Пт) 9:19, всего редактировалось 1 раз.

Ноябрь
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 23
Зарегистрирован: 05.11.2007 (Пн) 10:22

Сообщение Ноябрь » 09.11.2007 (Пт) 9:13

Код: Выделить всё
da.Update(ds,"users")

выдает ошибку
Для обновления требуется действительный UpdateCommand при передаче коллекции DataRow с измененными строками.

Что с этим делать?
Последний раз редактировалось Ноябрь 09.11.2007 (Пт) 11:55, всего редактировалось 1 раз.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 09.11.2007 (Пт) 9:57

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

Thomas
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 246
Зарегистрирован: 12.11.2005 (Сб) 0:17
Откуда: "Сказочное королевство"

Сообщение Thomas » 09.11.2007 (Пт) 12:32

Ноябрь
Приветствую.
Что с этим делать?

Мне думается, что вам молодой человек пора прислушаться к правилам форума: "один топик = один вопрос".

Что касается последнего вопроса, то смотрим в сторону CommandBuilder.
С наилучшими. :wink:
Met vriendelijke groetjes
VS2008 Pro FW3.5 SP1


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 112

    TopList