powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Чайниковские вопросы...
6 сообщений из 6, страница 1 из 1
Чайниковские вопросы...
    #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
Чайниковские вопросы...
    #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
Чайниковские вопросы...
    #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
Чайниковские вопросы...
    #32845153
Я нашел хранимую процедуру sp_rename - это то что надо....
Но как её выполнить?
Помогите плз, очень надо
...
Рейтинг: 0 / 0
Чайниковские вопросы...
    #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
Чайниковские вопросы...
    #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
6 сообщений из 6, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Чайниковские вопросы...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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