Crearea unei baze de date prin software

Crearea unei baze de date prin software

Sarcină: transferați date din tabele de baze de date către Oracle în tabelele de baze de date InterBase. Baza de date InterBase și toate tabelele ar trebui să fie create programat prin citirea informațiilor din baza de date Oracle.
Nu este posibilă instalarea codării naționale WIN1251 la crearea unei baze de date InterBase utilizând componenta IBDataBase. Imediat ce specificam IBDataBase1.Params.Add ("DEFAULT CHARACTER SET WIN1251"), programul se termina cu o eroare. Sunt acceptați și alți parametri (SIZE, UTILIZATOR, PASSWORD). Și cum să setați ordinea de sortare a PXW_CYRL dacă primesc informații despre tipul coloanei și dimensiunea acesteia din baza de date Oracle. Mulțumesc.

Mulțumesc lui Johnmen, dar eu, poate că ceva nu a înțeles sau a explicat prost. În IBConsole, pot crea perfect tabelele de care am nevoie cu ordinea de codificare și sortare necesară, dar trebuie să fac acest lucru în programul meu. Fac asta în felul următor:
IBDataBase1.Params.Add ("UTILIZATOR" "+ Trim (CreateBase.Edit2.Text) +" ");
IBDataBase1.Params.Add ("PAROLĂ" "+ Trim (CreateBase.Password.Text) +" ");
IBDataBase1.Params.Add ("PAGE_SIZE" + Trim (CreareBase.ComboBox1.Text));
//IBDataBase1.Params.Add("FUNCȚIE DEFECȚIONALĂ WIN1251 ");
IBDataBase1.SQLDialect: = 3;
IBDataBase1.CreateDatabase;
Din TIBDatabase.CreateDatabase + F1 rezultă că nu este necesar să introduceți codificarea națională în faza de creare a unei baze de date:
1. Setați numele bazei de date pe unitatea, calea și numele fișierului fișierului bazei de date.
2. Setați parametrii pentru parametrul pentru instrucțiunea CREATE DATABASE:
UTILIZATOR "SYSDBA"
PASSWORD "masterkey"
PAGE_SIZE 4096
3. Setați valoarea SQLDialect.
4. Apelați metoda CreateDatabase.
Și am nevoie de acest lucru pentru transferul de date ulterior de la Oracle. Așa că întreb - cum să înțelegeți asta. Mulțumesc.

2Aleksandr_n # xA0; (27/10/05 14:58)
Este o sarcină unică sau un șofer universal de oțel de la IB?

> Alexander_n # xA0; (27.10.05 16:32) [2]

1. Cotațiile pentru numele și parola sunt simple. Adăugați ("USER" "+ Trim (CreateBase.Edit2.Text) +" "" ");
2. Adăugați ("Set de caractere defecte WIN1251"); # xA0; complet legal.
3. Nu văd numele bazei de date.

Sergey13. Sarcina este o singură dată, dar tabelele din baza de date sunt zeci și dacă creați fiecare manual. Deși este posibil să se considere un peregonchik universal și nu numai de la Oracle.
Johnmen. Numele bazei de date este setat. Doar nu. Și pentru citate - MULȚUMIRI. A câștigat. Dar a apărut o nouă întrebare. Tabelul a fost creat și încărcat cu date. IBConsole îl vede (structură și date), dar nu vede Inteactive SQL, adică ca răspuns la numărul de interogări selectați (*) table_name Am răspunsul Tabelul necunoscut table_name. Și dacă în baza de date creez un alt tabel din ISQL, atunci aceeași solicitare se îndreaptă către el. Care ar putea fi problema? Mulțumesc.

În cachearea metadatelor.
Înainte de a efectua interogări DML (după DDL), ar fi bine să vă reconectați la baza de date.

2 [5] Alexander_n # xA0; (Oct 27, 05 17:36)
> Sarcina este o singură dată, dar tabelele din baza de date sunt zeci și dacă creați fiecare manual
Aș fi, dacă aș fi tu, să folosiți un set de trei programe. TOAD + NotePad + IBExpres.

De fapt, toate acestea ar putea fi încercate să depășească DataPump / IBDataPump. Și nu reinventați roata.

2 [8] Vitaly Panasenko # xA0; (Oct 28, 05 10:19 AM)
În timp ce este problema cu metadatele, așa cum am înțeles.

Întrebarea a rămas. Ce fel de caching poate fi dacă computerul a fost complet rebootat, dar situația este repetată. Mesajele create de IBConsole (structura și datele), dar nu văd Inteactive SQL, adică ca răspuns la numărul de interogări selectați (*) table_name Am răspunsul Tabelul necunoscut table_name.

Se dă o succesiune clară de acțiuni.

poate să nu aibă suficiente drepturi la masă

Aleksandr_n # xA0; (10/28/05 10:59 AM) [10]

Dați DDL crearea tabelului și interogarea pe care încercați să o accesați.
Cred cu tărie că ați creat un tabel cu un nume de caz-sensibil.

P.S. Drop IBConsole, utilizați IBExpert.

După crearea bazei de date, creez un tabel
IBTable1.Active:=False;
IBTable1.TableName: = "nume_tabel";
dacă nu IBTable1.Există atunci
# xA0; începeți
# xA0; cu IBTable1.FieldDefs face
# xA0; # xA0; începeți
# xA0; # xA0; Clear;
# xA0; # xA0; pentru i: = 0 la ListBox2.Items.Count-1 nu
# xA0; # xA0; cu AddFieldDef
# xA0; # xA0; # xA0; începeți
# xA0; # xA0; # xA0; Nume: = ListBox2.Items [i];
# xA0; # xA0; # xA0; dacă OraQuery1.FieldByName (ListBox2.Items [i]) .DataType = ftFloat apoi
# xA0; # xA0; # xA0; # xA0; DataType: = ftInteger
# xA0; # xA0; # xA0; altceva
# xA0; # xA0; # xA0; # xA0; DataType: = OraQuery1.FieldByName (listaBox2.Items [i]) .DataType;
# xA0; # xA0; # xA0; Dimensiune: = OraQuery1.FieldByName (ListBox2.Items [i]). Dimensiune;
# xA0; # xA0; # xA0; Necesar: = OraQuery1.FieldByName (ListBox2.Items [i]).
# xA0; # xA0; # xA0; sfârșitul;
# xA0; # xA0; sfârșitul;
# xA0; # xA0; cu IBTable1.IndexDefs face
# xA0; # xA0; # xA0; începeți
# xA0; # xA0; # xA0; Clear;
# xA0; # xA0; # xA0; cu ajutorul AddIndexDef
# xA0; # xA0; # xA0; # xA0; începeți
# xA0; # xA0; # xA0; # xA0; Nume: = "";
# xA0; # xA0; # xA0; # xA0; Câmpuri: = ListBox2.Items [ListBox2.ItemIndex];
# xA0; # xA0; # xA0; # xA0; Opțiuni: = [ixPrimar];
# xA0; # xA0; # xA0; # xA0; sfârșitul;
# xA0; # xA0; # xA0; sfârșitul;
# xA0; IBTable1.CreateTable;
# xA0; sfârșitul;
În ListBox2, am o listă cu numele câmpurilor (parțial sau total) din tabela de baze de date Oracle. Apoi formez interogarea și
OraQuery1.Open;
OraQuery1.First;
IBTable1.Close;
IBTable1.Database: = IBDataBase1;
IBTable1.TableName: = "nume_tabel";
IBTable1.Open;
în timp ce nu este OraQuery1
# xA0; începeți
# xA0; IBTable1.Insert;
# xA0; pentru i: = 0 la IBTable1.Fields.Count-1 face
# XA0; IBTable1.Fields [i] .value: = OraQuery1.FieldByName (IBTable1.Fields [i] .FieldName) .value;
# xA0; IBTable1.Post;
# xA0; OraQuery1.Next;
# xA0; sfârșitul;
IBTable1.Close;

> Cred cu tărie că ați creat un tabel cu un nume de caz-sensibil.
Da, în cel de-al treilea dialect, sunt atât de mulți oameni într-un sfârșit mort.

Uh-uh.
Și unde
Aleksandr_n # xA0; (10/28/05 10:59 AM) [10]
Întrebarea a rămas. Ce poate fi stocată în cache în cazul în care computerul a fost complet repornit, dar situația se repetă IBConsole creat masă a văzut (structură și date), dar nu vede Inteactive SQL, adică, ca răspuns la numărul de interogări selectați (*) table_name Am răspunsul Tabelul necunoscut table_name.
?

Aleksandr_n # xA0; (28.10.05 11:25) [15]

De ce aveți nevoie de astfel de probleme cu TIBTable?
Utilizați TIBSQL și interogarea CREATE TABLE. mult mai simplu, iar codul va fi mai ușor de înțeles.

1. Tabelul a fost creat și încărcat cu date. IBConsole îl vede (structură și date), dar nu vede Inteactive SQL, adică ca răspuns la numărul de interogări selectați (*) table_name Am răspunsul Tabelul necunoscut table_name. Și dacă în baza de date creez un alt tabel din ISQL, atunci aceeași solicitare se îndreaptă către el. # xA0; a constatat că, dacă cererea este prezentată în formular # xA0; selectați numărul (*) "nume_tabel", apoi este executat. Care ar putea fi problema?
2. Apelați cum să primiți un nume al unui câmp pe care este construită cheia (KEY PRIMARY), dacă sunteți conectat la masă pe care nu o cunoașteți.
3. Am pompa masa după cum urmează:
OraQuery1.Close;
OraQuery1.SQL.Clear;
OraQuery1.SQL.Add ("selectați * de la table_name");
OraQuery1.Open;
OraQuery1.First;
IBTable1.Close;
IBTable1.Database: = IBDataBase1;
IBTable1.TableName: = "nume_tabel";
IBTable1.Open;
în timp ce nu este OraQuery1
începe
IBTable1.Insert;
pentru i: = 0 la IBTable1.Fields.Count-1 face
IBTable1.Fields [i] .value: = OraQuery1.FieldByName (IBTable1.Fields [i] .FieldName) .value;
IBTable1.Post;
IBTransaction1.CommitRetaining;
OraQuery1.Next;
se încheie;
dar undeva după ce am descărcat 33.000 de înregistrări, am o eroare din memorie. Ce am făcut greșit?
Mulțumesc.


> Ce am făcut greșit?
> Mulțumesc.

Ai răspuns deja:

1. Citiți despre dialectele IB.
2. IBTable cache totul pe client, utilizați IBSQL.


> Sarcină: transferați datele din tabelele de baze de date către Oracle
> la tabelele de baze de date InterBase. Baza de date InterBase și
> toate tabelele ar trebui să fie create programat prin citire
> informații din baza de date Oracle.

Și de ce este atât de complicat? Nu există într-adevăr nici un model fizic al bazei de date, nici măcar unul conceptual?
Dar chiar și așa, este întotdeauna posibilă "inversarea inițierii" bazei existente în modelul fizic. Apoi nu vor fi recepționate doar mese, ci și toate comunicările, verificările și chiar logica serverului. Apoi puteți genera un script pentru a crea o bază de date nouă pentru DBMS-ul instrumentului CASE cunoscut.

Aleksandr_n # xA0; (11/01/05 11:30 AM) [19]
A constatat că, dacă cererea este prezentată în formular # xA0; selectați numărul (*) "nume_tabel", apoi este executat. Care ar putea fi problema?

Memorie: 0,78 MB
Timp de timp: 0.051 sec

Articole similare