Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Работа с данными

Страница: 1 |

 

  Вопрос: SQL запрос - Переименовать колонку в таблице Добавлено: 09.06.06 21:09  

Автор вопроса:  dromer | ICQ: 293-943-186 
Здравствуйте дорогие товарисчи! Надо помощь советом. Пробую нарыть в интернете как переименовать колонку в Access 2000 таблице (VB-6, Win2000pro). Ну ничего не получается. Уже сомневаюсь делает ли это SQL запрос вообще или нет.
Ниже привожу код в котором 2 кнопки добавления и удаления колонки работают, а переименование (3я кнопка) нет. Но именно такой запрос как в коде для нее, я нашел в инете.
В references проекта вроде все проставлено. На форме есть MSFlexGrid и три кнопки. Где ошибка?

Option Explicit

Public db As New ADODB.Connection
Public rs As New ADODB.Recordset

Private Sub Form_Load()

db.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\Test.mdb;Persist Security Info=False"
rs.Open "SELECT * FROM Table1", db, adOpenStatic, adLockReadOnly
rs.MoveFirst

MSFlexGrid1.Rows = rs.RecordCount + 1
MSFlexGrid1.Cols = rs.Fields.Count
MSFlexGrid1.Row = 0
MSFlexGrid1.Col = 0
MSFlexGrid1.RowSel = MSFlexGrid1.Rows - 1
MSFlexGrid1.ColSel = MSFlexGrid1.Cols - 1
MSFlexGrid1.Clip = rs.GetString(adClipString, -1, Chr(9), Chr(13), vbNullString)
MSFlexGrid1.Row = 1

'Тут не совсем корректно заполняется MSFlexGrid, но не в
'этом суть. Результаты работы кнопок я видел открывая
'базу через Microsoft Access программу

Set rs = Nothing
Set db = Nothing

End Sub

Private Sub cmdAddColumn_Click()
  Dim sqlStatement As String
  sqlStatement = "ALTER TABLE Table1 ADD mmm TEXT NOT NULL"
  db.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\Test.mdb;Persist Security Info=False"
  Call db.Execute(sqlStatement)
  db.Close
End Sub

Private Sub cmdDelColumn_Click()
  Dim sqlStatement As String
  sqlStatement = "ALTER TABLE Table1 DROP COLUMN mmm"
  db.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\Test.mdb;Persist Security Info=False"
  Call db.Execute(sqlStatement)
  db.Close
End Sub

Private Sub cmdRenColumn_Click()
  Dim sqlStatement As String
  sqlStatement = "ALTER TABLE Table1 RENAME COLUMN mmm TO aaa"
  db.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\Test.mdb;Persist Security Info=False"
  Call db.Execute(sqlStatement)
'И вот тут он мне говорит что есть синтаксическая ошибка
' в составлении запроса
  db.Close
End Sub



Please Help

Ответить

  Ответы Всего ответов: 9  

Номер ответа: 1
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #1
Добавлено: 09.06.06 21:44
В MySQL переименование колонки выглядит как:
ALTER TABLE `table` CHANGE COLUMN `col1` `col2`

Проверь, ты не с чем не спутал?

Ответить

Номер ответа: 2
Автор ответа:
 dromer



ICQ: 293-943-186 

Вопросов: 16
Ответов: 28
 Профиль | | #2 Добавлено: 10.06.06 01:20
Нет, не получается. Попрежнему та же ошибка. Конечно что-то напутал, раз не идет.
И код выложил что-бы легче было попробовать у себя. :( У кого пойдет, - пишите.

Ответить

Номер ответа: 3
Автор ответа:
 AndreyMp



ICQ: 237822510 

Вопросов: 28
Ответов: 1182
 Профиль | | #3 Добавлено: 10.06.06 01:29
В MySQL переименование колонки выглядит как:
ALTER TABLE `table` CHANGE COLUMN `col1` `col2`
Проверь, ты не с чем не спутал?

 У меня все идет. Проверь.

Ответить

Номер ответа: 4
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #4 Добавлено: 10.06.06 15:54
Public Function ReNameColumn(DataBasePath As String, Table As String, OldColumn As String, _
                             NewColumn As String, _
                             Optional Password As String) As Long '+
                          
'Переименовывает столбец в таблице в базе данных
'При успехе возвращает 0, иначе номер ошибки
On Error GoTo e
 Dim ct As ADOX.Catalog
 Dim MyColumn As ADOX.Column

 Set ct = New ADOX.Catalog
 
 ct.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
   ;DataBasePath$ & ";" & IIf(Trim(Password) <> "", "Jet OLEDB:Database Password=" & _
   Trim$(Password$) & ";", "";)
    
    Set MyColumn = ct.Tables(Table).Columns(OldColumn)
    MyColumn.Name = NewColumn
 
   Set cl = Nothing
   Set MyColumn = Nothing
   ReNameColumn = 0
   Exit Function
e:
    ReNameColumn = Err.Number
    Debug.Print Err.Description
    ;DescriptionLastError = Err.Description
    On Error GoTo 0: On Error Resume Next
    Set cl = Nothing
    Set MyColumn = Nothing
End Function

Ответить

Номер ответа: 5
Автор ответа:
 dromer



ICQ: 293-943-186 

Вопросов: 16
Ответов: 28
 Профиль | | #5 Добавлено: 11.06.06 01:11
Огромное спасибо то HACKER!!!! Заработало. Только поменял cl в некоторых местах на ct.

Ответить

Номер ответа: 6
Автор ответа:
 AndreyMp



ICQ: 237822510 

Вопросов: 28
Ответов: 1182
 Профиль | | #6 Добавлено: 11.06.06 10:31
Блин HACKER ты всегда адоксом пользуешься?

Ответить

Номер ответа: 7
Автор ответа:
 dromer



ICQ: 293-943-186 

Вопросов: 16
Ответов: 28
 Профиль | | #7 Добавлено: 11.06.06 14:57
To AndreyMp. А у тебя есть предложение как переименовать колонку не подключая к проекту ADOX?
Пока что это единственный вариант который заработал.

Ответить

Номер ответа: 8
Автор ответа:
 AndreyMp



ICQ: 237822510 

Вопросов: 28
Ответов: 1182
 Профиль | | #8 Добавлено: 11.06.06 15:16
Тот же самый SQL, но я проверял на MSSQL.

Ответить

Номер ответа: 9
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #9 Добавлено: 11.06.06 23:48
фак да, загон получился с ct/cl, просто изначально cl было, потом мне чё то ct захотелось, а про обнуление забыл :)

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам