[C#] Tabela w Acces

0

Witajcie, jak przy użyciu OleDb dodać do istniejącej bazy tabelę, albo skopiować atrybuty istniejącej dodając jednocześnie jedną kolumnę dodatkową.
Ja zw swojej strony napotkałem się na coś takiego, ale mało z tego rozumiem i nic mi to nie dało.

To create a table you first create a Catalog object, then a new Table object. You use the Append method of the Table object’s Columns collection to add field definitions (Column objects) to the Columns collection. Finally, you append the Table object to the Tables collection of the Catalog object. It is not necessary to use the Create method to create Column objects for the field definitions before you append them to the Columns collection. The Append method can be used both to create and to append the Column object. The following example uses these objects to create a Contacts table in the database specified in the strDBPath argument.
Sub CreateTable(strDBPath As String)
Dim catDB As ADOX.Catalog
Dim tblNew As ADOX.Table

Set catDB = New ADOX.Catalog
' Open the catalog.
catDB.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" _
& "Data Source=" & strDBPath

Set tblNew = New ADOX.Table
' Create a new Table object.
With tblNew
.Name = "Contacts"
' Create fields and append them to the
' Columns collection of the new Table object.
With .Columns
.Append "FirstName", adVarWChar
.Append "LastName", adVarWChar
.Append "Phone", adVarWChar
.Append "Notes", adLongVarWChar
End With
End With

' Add the new Table to the Tables collection of the database.
catDB.Tables.Append tblNew

Set catDB = Nothing
End Sub

W tej chwili mam to tak:

private void test()
        {
            OleDbConnection accesConn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+sciezkaBazy+";Persist Security Info=True");
            accesConn.Open();

            OleDbCommand tworz = new OleDbCommand("CREATE TABLE mytable (int C(10), char C(10));",accesConn);
            tworz.ExecuteNonQuery();
            
            if (accesConn != null)
                accesConn.Close();
        }

Oczywiście będę kombinował, ale może ktoś pomoże. Plz Help.
0

Witam.

W instrukcji SQL zapomniałeś o istotnym elemencie...
Nie określiłeś nazw kolumn...np:
"CREATE TABLE Klienci (nazwisko char(50), imie char(50))"

Pozdrawiam.

0

o to to... dzięki, dawno nie dłubałem w SQL w sumie jestem trochę zmęczony. Ok to łatwiejsze rozwiązanie już mam, ale czy jakiś programista nie stworzył już jakiejś fajnej metody do kopiowania tabel ?? Najlepiej, żeby wyglądało to tak... Mając tabele A wykonać Klonowanie jedynie atrybutów i dodatkowo ewentualnie wykonanie polecenie wstawiające kolumny dodatkowe, chociaż to wstawianie to już i tak polecenie SQL. Zastanawiam się czy robić z zapytania i na podstawie stworzyć tabele z typamie z zapytania ( OleDbType.. ) i wtedy utworzyć ?? czy też może się da to zrobić jakoś łatwiej. Na dzisiaj ide spać jutro znowu do tego powrócę.

0

...użyj funkcji GetSchema() - wyszukuje metadane przechowywane w bazie danych.

np:
accesConn.Open();
DataTable TablicaDanych = new DataTable;
TablicaDanych = accesConn.GetSchema();

DataTableReader dReader = new DataTableReader(TablicaDanych);

        while (dReader.Read())
        {
           //Odczytaj wartości wierszy z poszczególnych kolumn
           this.Lista.Items.Add(dReader.GetString(0));
           this.Lista.Items.Add(dReader.GetString(1));  
        }

Pozdrawiam.

0

Dzieki za podpowiedzi, zrobilem to nie co inaczej, ze względu na to, że będę tworzył i tak nową kolumnę to posłuż się poleceniem pierwszym, a do okreslenia tabeli zrobilem klase oraz pare metod oraz jedna virtualna dla tej z dodatkowa kolumna. wszystko dziala fajnie i szybko. pozostalo mi tylko posortowac dane i kombinowalem na rozne sposoby, ale jeden mi sie podoba i jest w porownaniu do topornych o wiele szybszy mniej wiecej w 6 powtorzeniach o 12 krokow szybsza, a mam tych krokow ok 5400 a moze byc wiecej wiec ten pierwszy sposob wybralem, ale zeby to dzialalo musze rozpoczac z jakims pkt odniesienia i tu jest klopot. Moge wziasc ostatni el. lub pierwszy (oczywiscie nie mozna powiedziec ze ostatni to najmniejszy lub najwiekszy) zrobilem pewne zapytanie. Opiszę to tak:

Mam tabele A (powiedzmy 500 el) nie posortowana i na jej podstawie tworze tymczasowa tabele B z wybranymi danymi (powiedzmy 22) ktore mam posortowac, z niej w prosty sposob otrzymuje elementy ktore moge sortowac dzieki pewnemu zapytaniu ale nie potrzebuje tworzyc zadnych tabel chodzi o to ze mam wtedy (21 wartosci) ktore sa rozne w zaleznosci z ktorego pkt odniesienia je posortuje, nazwe ja zapytaniem C. Pytanie jakie powinienem zastosowac zapytanie aby wyswietlic ten 1 pkt odniesienia od ktorego bede sortowal ??

Ja probowalem tak... na normalny jezyk wyswietl elementy z tabeli B (22elementowej) ktorych nie ma w zapytaniu C. W ten sposob otrzymal bym moja wartosc, ale... nie wychodzi mi to :( probowalem right joina, nie left nie normalnego nie... nie wiem. Jesli ustawie wyswietl mi elementy z B ktore sa w C to dziala ok ale wyswietl z B te ktorych nie ma w C juz nie dziala, a wlasciwie robi tak ze wyswietla mi wszystkie dane podwojnie ok... w drugiej kolumnie jest wartosc, ale to nie ma sensu, bo nie o to chodzi.

Proszę help.

PS. Ehh jeszcze nigdy tak sie nie rozpisałem. :D

Dobra widzę, że na razie brak pomysłów, więc zrobiłem to oczywiście w trywialny sposób odczytując tylko pierwszy wynik z drugiej kolumny, aczkolwiek takie rozwiązanie mi się nie podoba, ale DZIALA :D

1 użytkowników online, w tym zalogowanych: 0, gości: 1