Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Чайниковские вопросы... / 6 сообщений из 6, страница 1 из 1
25.12.2004, 20:40:13
    #32844961
Чайниковские вопросы...
Вот случилось, что надо написать на VB, а я в нем вообще не бывал....
Иммеется следующее...
Создаю пустой mdb файл... В нем создаю таблицу...
Надо написать процедуру, которая просто переименовывает название поля в этой таблице...
А дальше - надо написать процедуру, которая смотрит название колонки и если оно (название) старое, то переименовывает в новую.

Что я нашел, так только это:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Dim rs, i
Set rs = CreateObject("ADOCE.Recordset.3.1")
rs.Open "CREATE TABLE changeme (f1 varchar)"
rs.Open "ALTER TABLE changeme TO changed"
rs.Open "ALTER TABLE changed RENAME f1 TO firstfield"
rs.Open "ALTER TABLE changed ADD secondfield varchar"
rs.Open "ALTER TABLE changed ADD lastfield varchar"
rs.Open "ALTER TABLE changed MOVE lastfield BEFORE firstfield"
rs.Open "changed"
For i =  0  To rs.fields.Count -  1 
  MsgBox rs.fields(i).Name
Next
rs.Close
rs.Open "DROP TABLE changed"
Set rs = Nothing
Но сколько я тут не мучился, я не нашел, как подконектиться к текущей базе, то есть базе, которая лежит в том же mdb файле что и скрипт.
...
Рейтинг: 0 / 0
25.12.2004, 21:16:34
    #32844973
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чайниковские вопросы...
Пример Коннекш для MDB
Код: plaintext
1.
2.
3.
4.
5.
6.
Set conn1 = New ADODB.Connection
With conn1
    .Provider = "Microsoft.Jet.OLEDB.4.0"
    .ConnectionString = App.Path & "\База.mdb"
    .Mode = adModeReadWrite
    .Open
End With
Пример (MS SQL-Server)
Код: plaintext
1.
2.
3.
conn1.Execute "if not exists (select * from sysobjects where id = object_id(N'[dbo].[ПОДСТАНОВКИ]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
 CREATE TABLE [dbo].[ПОДСТАНОВКИ] ([ИД] [int] IDENTITY (1, 1) NOT NULL , [Форма] [nvarchar] (50) NULL , [Поле] [nvarchar] (64) NULL , [Подстановка]
 [nvarchar] (255) NULL) ON [PRIMARY]"
conn1.Execute "ALTER TABLE [dbo].ПЛАТЕЖ ADD [ФДата] [datetime] NULL"
...
Рейтинг: 0 / 0
26.12.2004, 16:10:04
    #32845151
Чайниковские вопросы...
Написал следующий простейший код
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Public Sub MyProc()
    Set Conn = New ADODB.Connection
    Conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\main2002.mdb;Persist Security Info=True"
    Conn.Mode = adModeReadWrite
    Conn.Open
    Conn.Execute "select * from sysobjects"
End Sub
но при выполнении вылазит ошибка что Microsoft Jet не может найти таблицу sysobjects (а то так бы пробрема решилась простым апдейтом).
...
Рейтинг: 0 / 0
26.12.2004, 16:20:03
    #32845153
Чайниковские вопросы...
Я нашел хранимую процедуру sp_rename - это то что надо....
Но как её выполнить?
Помогите плз, очень надо
...
Рейтинг: 0 / 0
27.12.2004, 10:46:39
    #32845530
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чайниковские вопросы...
1. Пример приведенный выше - это для MSSQL-Server (нет такого примера для Access). Соответственно Sysobjects аксессом не поддерживается.
2.
On Error Resume Next
conn.Execute "CREATE TABLE [ТАБЛИЦА]"
conn.Execute "ALTER TABLE [ТАБЛИЦА] ADD [Дата] datetime null"
On Error GoTo 0

Перед созданием таблицы надо проверить ее существование. То же для полей.
Как это сделать в аксесе не знаю по этому стоит On error.
...
Рейтинг: 0 / 0
27.12.2004, 13:15:02
    #32845904
Чайниковские вопросы...
Угу но проблема в том что это надо делать в Акцесе - в этом то и бок.
Нашел вот такую функцию:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
Public Function RenameColumn(ByVal strDB As String, strTable As String, _
                    strOldColumn As String, strOldColumn As String) As Boolean

On Error GoTo Hell

'Create a Catalog object
Dim oCat As ADOX.Catalog
Set oCat = New ADOX.Catalog
oCat.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " & strDB

'Create a table object
Dim oTbl As ADOX.Table
Set oTbl = New ADOX.Table

Set oTbl = oCat.Tables(strOldTable)
oTab.Columns(strOldColumn).Name = strOldColumn

'Return Success
RenameColumn = True

Exit_For:
    'Clean up
    Set oCat = Nothing
    Set oTbl = Nothing
    Exit Function

Hell:
    GoTo Exit_For

End Function
Но теперь проблема в том, что не знаю как подключить ADOX.

PS: Может все-таки кто-нить делал продбные задачи в Access?
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Чайниковские вопросы... / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]