Pytanie : Kopia/Eksportowy SQL Serwer Baza danych

I mieć rutyna który dzwonić z the stuknięcie guzik w VB6. I używać MS SQL Serwer 2005 Ekspresowy, i MS Dostęp 97-2003 baza danych. The rutyna kasować mój istniejący Dostęp DB, odtwarzać pusty jeden, wtedy zapętlać przez the stół w the SQL Serwer DB, wtedy z the stół dane. Ono pracować doskonale, oprócz ono być wolny na stół z duże ilości dane. Komentować być ponieważ dla to SQL stół, ono otwierać recordset, budować "wszywka" sznurek, i dodawać the rząd the Dostęp DB.

I komentować to the kod I potrzebować zamieniać. I polubić ten kod z jeden oświadczenie który kopiować the rejestr w jeden iść. I próbować każdy permutacja oświadczenie jak "WYBIÓRKA * W OD " (pracować ponieważ ono próbować the już-stół). Także wypróbowany "WSZYWKA W WYBIÓRKA * OD ", i milion inny rzecz. Tam  musieć sposób, I właśnie móc ono, lub być może I mieć ale miewać składnia errors.

This iść twardy jeden. I chcieć mój stół wcale inaczej, I chcieć o DTS lub SSIS, zaopatrzony procedura, lub łączyć baza danych. Przy the punkt dokąd the kod komentować procedura, oba baza danych być otwarty, wszystkie stołowy imię znać i istnieć w oba DB, i procedura przygotowywać dla the kopiowy procedura. I właśnie chcieć ładny czysty SQL oświadczenie/zapytanie który kopiować the rejestr szybki bieg przez the recordsets. The jedyny inny odpowiedź I można ciąć inny the komentować kod, zamykać the baza danych, i kopiować the stół inaczej. Ale pamiętać, ty gubić the stołowy imię który sposób i potrzebować znowu. The pomysł ten rutyna być jakaś SQL baza danych Dostęp DB, bez dokrętka o the stół lub ich structure.

Sounds łatwy, ale ono jechać dokrętka. Móc anyone? Pod być the rutyna:

Function SQLtoAccess () Gdy Boolean
Ćmić sqlDB Gdy Nowy ADODB.Connection
Ćmić jetDB Gdy Nowy ADODB.Connection
Ćmić rs Gdy Nowy ADODB.Recordset
Ćmić rt Jako Nowy ADODB.Recordset
ReDim Tables$ ((0))

Na Lokalny Błąd Rozpoczynający Hell

Rem *** Deleatur stary Dżetowy baza danych ***
Jeżeli Len (Dir$ (DBFileSpec$)) Then
Wywoławczy CRFO (DBFileSpec$, "k", h%, (0)) "zwłoki file
Końcówka If

Rem *** Tworzyć nowy Dżetowy baza danych ***
Wywoławczy CreateAccessDB (DBFileSpec$)

Rem *** Otwarty SQL Serwer ***
sqlDB.Open SQLFileSpec$

Rem *** Chwyt wszystkie SQL stół ***
SQL$ = "WYBIÓRKA * OD INFORMATION_SCHEMA.Tables ROZKAZ Table_Type, Table_Name "
rs. Otwierać SQL$, sqlDB, adOpenForwardOnly, adLockReadOnly
Podczas Gdy Nie rs.EOF
Rem *** Oprócz stół imię ***
ReDim Prezerwa Tables$ (UBound (Tables$) + 1)
Tables$ (UBound (Tables$)) = rs! Table_Name
      rs.MoveNext
   Wend
   rs.Close

Screen.MousePointer = 11 "hourglass

Rem *** Łączyć Baza danych ***
jetDB.Provider = "Microsoft.Jet.OLEDB.4.0 "
jetDB.Open DBFileSpec$

Rem *** Cykl przez stół, i ***
Dla i% = (1) UBound (Tables$)
Rem *** Dostawać stołowy info ***
mesa$ = Tables$ (i%)
SQL$ = "WYBIÓRKA" "& mesa$ &"" OD INFORMATION_SCHEMA.Tables "
rs. Otwarty SQL$, sqlDB, adOpenForwardOnly, adLockReadOnly
Jeśli nie rs.EOF Then
Rem *** Dostawać Szpaltowy info ***
SQL$ = "WYBRANY Column_Name, Data_Type, Character_Maximum_Length, Is_Nullable "
SQL$ = SQL$ & "OD INFORMATION_SCHEMA.Columns DOKĄD "
SQL$ = SQL$ & "Table_Name = "" & mesa$ & "" "
rt. Otwierać SQL$, sqlDB, adOpenForwardOnly, adLockReadOnly
tbl$ =" ("
Podczas Gdy Nie rt.EOF
Wybrany Skrzynka rt! Data_Type
Skrzynka "kawałek "
Rem ***
txt$ = "YESNO "
Skrzynka "tinyint "
Rem *** Bajt ***
txt$ = "BAJT "
Skrzynka "smallint "
Rem *** Integer ***
txt$ = "INTEGER "
Skrzynka "int "
Rem *** Długi Integer ***
txt$ = "TĘSKNIĆ "
Skrzynka "smallmoney", "pieniądze "
Rem *** Waluta ***
txt$ = "WALUTA "
Skrzynka "istny "
Rem *** Pojedynczy ***
txt$ = "PRZERZEDZAĆ "
Skrzynka "pławik "
Rem *** Kopia ***
txt$ = "KOPIA "
Skrzynka "datetime", "smalldatetime", "timestamp "
Rem *** Data/Czas ***
txt$ = "CSTR "
Skrzynka 9
Rem *** Binarny ***
txt$ = "BINARNY "
Skrzynka "nvarchar", "varchar", "nchar", "char "
Rem *** Tekst ***
ds$ = CStr (rt! Character_Maximum_Length)
txt$ = "NVARCHAR (" & ds$ & ") "
Skrzynka "wizerunek "
Rem ***/> Przedmiot ***
Skrzynka "notatka "
Rem *** Notatka lub Hyperlink ***
txt$ = "NOTATKA "
Końcówka Select
Jeżeli rt! Is_Nullable = "NIE" Then
txt$ = txt$ &" NIEOBOWIĄZUJĄCY "
Końcówka If
tbl$ = tbl$ & "[" & rt! Column_Name & "]" & ""& txt$ &", "
rt.MoveNext
Wend
Mid$ (tbl$, Len (tbl$), 1) = ") "
rt. Close
rs. Close
Rem *** Tworzyć the przeklęty rzecz już! ***
SQL$ = "TWORZYĆ STÓŁ [" & mesa$ & "]" & tbl$
jetDB.Execute SQL$, adExecuteNoRecords
Rem *** Znalezisko wszystkie Prasmoła Klucz ***
SQL$ = "WYBRANY s.name JAKO TABLE_SCHEMA, t.name JAKO TABLE_NAME, k.name JAKO CONSTRAINT_NAME, k.type_desc JAKO CONSTRAINT_TYPE, "
SQL$ = SQL$ & "c.name JAKO COLUMN_NAME, ic.key_ordinal JAKO ORDINAL_POSITION "
SQL$ = SQL$ & "OD sys.key_constraints JAKO k "
SQL$ = SQL$ & "ŁĄCZYĆ sys.tables JAKO t NA t.object_id = k.parent_object_id "
SQL$ = SQL$ & "ŁĄCZYĆ sys.schemas JAKO s NA s.schema_id = t.schema_id "
SQL$ = SQL$ & "ŁĄCZYĆ sys.index_columns JAKO ic NA ic.object_id = t.object_id I ic.index_id = k.unique_index_id "
SQL$ = SQL$ & "ŁĄCZYĆ sys.columns JAKO c NA c.object_id = t.object_id I c.column_id = ic.column_id "
SQL$ = SQL$ & "ROZKAZ TABLE_SCHEMA, TABLE_NAME, CONSTRAINT_TYPE, CONSTRAINT_NAME, ORDINAL_POSITION "
rt. Otwierać SQL$, sqlDB, adOpenForwardOnly, adLockReadOnly
Rem *** Ustawiać the stół Prasmoła Klucz ***
txt$ = ""
Podczas Gdy Nie rt.EOF
Jeżeli rt! Table_Name = mesa$ Then
Jeżeli rt! Constraint_Type = "PRIMARY_KEY_CONSTRAINT" Then
ConName$ = rt! Constraint_Name
txt$ = txt$ &" ["& rt! Column_Name &"], "
Końcówka If
Końcówka If
rt.MoveNext
Wend
rt. Close
Jeżeli Len (txt$) Then
Mid$ (txt$, Len (txt$), 1) = ") "
SQL$ = "ZMIENIAĆ STÓŁ [" & mesa$ & "] DODAWAĆ PRZYMUS [" & ConName$ & "] PRASMOŁA KLUCZ (" & txt$
jetDB.Execute SQL$, adExecuteNoRecords
Końcówka If
Końcówka If
Rem *** Pełnia 'er 1)! ***
SQL$ = "WYBIÓRKA * OD [" & mesa$ & "] "
rs. Otwierać SQL$, sqlDB, adOpenForwardOnly, adLockReadOnly
Podczas Gdy Nie rs.EOF
SQL$ = "WSZYWKA W [" & mesa$ & "] CENIĆ ("
Dla f% = (0) Rs. Fields.Count - 1
txt$ = SQLStr$ (rs. Odpowiadać (f%) .value)
Jeżeli txt$ =" "Prawdziwy"" Then
txt$ = "- (1) "
ElseIf txt$ =" "Fałszywy"" Then
txt$ = "(0) "
Końcówka If
SQL$ = SQL$ & txt$
Jeżeli f% < rs. Fields.Count - (1) Then
SQL$ = SQL$ &", "
Końcówka If
Następny f%
SQL$ = SQL$ & ") "
jetDB.Execute SQL$, adExecuteNoRecords
rs.MoveNext
Wend
rs. Close
Następny i%

sqlDB.Close
jetDB.Close

Ustalony rs = Nothing
Ustalony rt = Nothing
Ustalony sqlDB = Nothing
Ustalony jetDB = Nothing

Screen.MousePointer = (0) 'normal

SQLtoAccess = True

Wyjście Function

Hell:
Jeżeli rs. Stan = (1) Then
rs. Close
Ustalony rs = Nothing
Końcówka If
Jeżeli rt. Stan = (1) Then
rt. Close
Ustalony rt = Nothing
Końcówka If
Jeżeli sqlDB.State <> adStateClosed Then
ssiDB.Close
Ustalony sqlDB = Nothing
Końcówka If
Jeżeli jetDB.State <> adStateClosed Then
jetDB.Close
Ustalony jetDB = Nothing
Końcówka If
i% = MsgBox ("Wewnętrzny błąd", vbCritical, "SQLtoAccess" & vbCrLf & vbCrLf & Err.desription)
Screen.MousePointer = (0) 'normal

End Function

For odniesienie, przykład SQLFileSpec$ być:
Provider=SQLOLEDB.1; Persist Ochrona Info=FALSE; Użytkownik - id =MyUserName; Password=MyserPassword; Początkowy Catalog=MyDatabase; Dane Source= (miejscowy) \ SQLEXPRESS; Connect Timeout=5

And DBFileSpec$ być:
C:\Database\MyAccess.mdb

TIA dla jakaś pomoc lend.
móc lend.

Odpowiedź : Kopia/Eksportowy SQL Serwer Baza danych

I rozumieć ono, gdy ty twierdzić, using the IP praca ale nie the "DNS" imię, lub FDQN gdy I lubić ono.
The różnica w the proces lub "numer banku" the prośba być the zagadnienie gdy ty twierdzić ono.
Pozwalać the różnica: The XP VM notować dalej the domena, i tym samym mieć świadectwo w pogotowiu, i ono znać the użytkownik w pogotowiu imię i hasło. Hence the automatyczny lub "pass-through" nazwa użytkownika.

Dlaczego my symulować to na the serwer?
Gdy ty logon od the serwer, using the obmurowany IE, ty używać the administrator (lub admin-typ) dla referencje.
The IIS to spojrzenie lubić [email protected] LUB NETBIOSNAME/username LUB username.domain.extension LUB username@NETBIOSNAME, LUB CN=administrator, OU=etc, OU=etc, Etc.
Użytkownik opuszczać mnóstwo iteracja the właściwy nazwa użytkownika dla użytkownik.
JAKKOLWIEK: gdy ty używać the IP, the IE posyłać the Windows referencje. ONO PUSTE MIEJSCE POLE TAMTE POLE.
The najprawdopodobniejszy niepowodzenie być że the serwer appending the domena już nazwa domeny; jak to: username.domain.com.domain.com
Ten użytkownik istnieć, i móc login. Nevermind który ty właśnie pisać na maszynie w username lub username.domain.com
Ponieważ ty twierdzić że the XP i the rozgałęźnik serwer wszystkie punkt the dokładny ten sam DNS, then the problem musieć w jeden trzy miejsce:
1. The IE
2. The domena położenie w the NIC interfejs być jakoś różny the XP jednostka. Spojrzenie przy the DNS położenie i porównywać the XP VM z the serwer. Spojrzenie przy the domena położenie.
3. The IIS -- książka telefoniczna móc zagadnienie z the referencje wymagać i the forma zarówno jak i the wirtualny książka telefoniczna.
Tam  musieć błąd w the wydarzenie widz gdy the nazwa użytkownika nie udać się. Ono mówić ty który zagadnienie ty stawiać czoło, przynajmniej w tym sensie, że ono utożsamiać źle imię lub hasło (pamiętać, ono liczyć się że ty stawiać ono w dobro, ono liczyć się że ono zgadzać się z the format IIS chcieć ono i że format zmieniać gdy ty być na the lokalny maszyna), lub być jak "wymagać SSH" lub być.

Mój domysł być: The serwer dodawać domena etykietka lub ty gdy ty login bezpośrednio od. Jeżeli ty używać FQDN, the DNS zapewniać the IP, the SRV rejestr Etc. Etc. Ten informacja samochód-dodawać the referencje ty pisać na maszynie wewnątrz. Ten dokładny problem zdarzać się na non-rozgałęźnik Wymiana jeżeli ty logon the serwer jako miejscowy admin (gdy the Wekslowy serwer być DC). The miejscowy admin imię podążać the machine imię (admin.termserver1) i wtedy gdy ty próbować OWA, twój imię komes twój jak administrator.domain.extension@termserver1
Ono nie udać się. Używać the IP, i ono akceptować the pisać na maszynie w creds.
Inne rozwiązania  
 
programming4us programming4us