Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


mellan databaser

Postades av 2003-03-19 11:02:00 - Peter Granvall, i forum visual basic - allmänt, Tråden har 28 Kommentarer och lästs av 705 personer

Om jag har 2st databaser

db 1 som inehåller 2st fält
db 2 som inehåller 3st fält

nu vill jag flytta allt från databas 1 till databas 2

går det att göra på ett smidigt sätt..

(håller på med en uppdatera funktion till programet)


Svara

Sv: mellan databaser

Postades av 2003-03-19 11:13:57 - Andreas Hillqvist

Du gör det nog smidigast i accsess. Öppna den nya databasen och importera eller länka till den gammla tabellen med data. Kör sedan INSERT INTO fråga:

INSERT INTO NyTabell (NyttFältNamn1, NyttFältNamn2)
SELECT GammaltFält1, GammaltFält2
FROM GammalTabell

Du kan även ange standardvärde för den nya kolumnen:

INSERT INTO NyTabell (NyttFältNamn1, NyttFältNamn2, NyttFältNamn3)
SELECT GammaltFält1, GammaltFält2, 'Test'
FROM GammalTabell


Svara

Sv: mellan databaser

Postades av 2003-03-19 11:21:26 - Peter Granvall

Jo men då blir det krångligt för användarena..
meningen är att dom ska kunna uppdatera den gamla versionen med den nya som inehåller lite mer fält...


Svara

Sv: mellan databaser

Postades av 2003-03-19 15:35:53 - Johan Djupmarker

Kör följande SQL i programmet:

INSERT INTO NyTabell (NyttFältNamn1, NyttFältNamn2)
SELECT GammaltFält1, GammaltFält2
FROM GammalTabell IN 'C:\blabla\gammal_databas.mdb'

/Johan


Svara

Sv: mellan databaser

Postades av 2003-03-19 17:42:25 - Stefan Bergh

Det går väll att bara lägga till ett fält i den gamla databasen?

Kan inte koden i huvet själv men nån annan här är jag säker på kan ;)


Svara

Sv: mellan databaser

Postades av 2003-03-20 07:23:11 - Peter Granvall

Då måste alla användare som kör programet ha office97 installerat.. Det är lite för mycket begärt.


Svara

Sv: mellan databaser

Postades av 2003-03-20 08:35:21 - Jan Bulér

Om du gör ett litet program med SQL satser som ska uppdatera den befintliga databasen så kan du ju använda SQL kommandot ALTER TABLE för att t ex lägga till ett fält i en tabell.

Detta är ett exempel från MSDN (Sök på ALTER TABLE)

<code>
Dim rs, i
Set rs = CreateObject("ADOCE.Recordset.3.1")
rs.Open "CREATE TABLE changeme (f1 varchar)"
rs.Open "ALTER TABLE changeme TO changed"

'Byt namn på ett fält
rs.Open "ALTER TABLE changed RENAME f1 TO firstfield"

'Lägg till ett fält i tabellen
rs.Open "ALTER TABLE changed ADD secondfield varchar"
rs.Open "ALTER TABLE changed ADD lastfield varchar"

'Ändra ordningen på fälten
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

</code>

//

Janne


Svara

Sv: mellan databaser

Postades av 2003-03-20 09:36:04 - Peter Granvall

Jo det var ett bra sätt..

Men det är lite mera ändringar mellan den gamla
och den nya databasen..


Svara

Sv: mellan databaser

Postades av 2003-03-20 10:12:55 - Andreas Hillqvist

Varför använda ett recordset och inte connection objektet. Eller att begöra en specefik version av det?
<code>
Dim con as ADODB.Connection
Set con = New ADODB.Connection
con.Open "<<< Din Anslutningssträng ska stå här>>>"

con.Execute "CREATE TABLE changeme (f1 varchar)"
con.Execute "ALTER TABLE changeme TO changed"

'Byt namn på ett fält
con.Execute "ALTER TABLE changed RENAME f1 TO firstfield"

'Lägg till ett fält i tabellen
con.Execute "ALTER TABLE changed ADD secondfield varchar"
con.Execute "ALTER TABLE changed ADD lastfield varchar"

'Ändra ordningen på fälten
con.Execute "ALTER TABLE changed MOVE lastfield BEFORE firstfield"

'Tar bort tabellen
con.Execute "DROP TABLE changed"

con.Close

Set con = Nothing
</code>


Svara

Sv: mellan databaser

Postades av 2003-03-20 15:05:55 - Peter Granvall

jag vill bara flytta från db1 till db2


Svara

Sv: mellan databaser

Postades av 2003-03-20 16:04:31 - Peter Björklund

-: SELECT för db1
SELECT tabellnamn.fält1,tabellnamn.fält2 FROM tabellnamn

-: INSERT för db2
INSERT INTO tabellnamn(fält2,fäl3)VALUES("' & RS("fält1") & '","' & RS("fält2") & '")

alternativt...

UPDATE tabelnamn SET fält2 = RS("fält2"),fält3 = RS("fält3") WHERE... bla bla bla

...om det är uppdatering av infon i db2 som gäller.



Svara

Sv: mellan databaser

Postades av 2003-03-20 17:00:23 - Andreas Hillqvist

Vad är det du har problem med? IN borde vara det smidigaste sättet att lösa det på. Eftersom det är databasmotorn som läser av tabellen och infogar poster.

Varför fungerar inte detta sätt för dig?


Svara

Sv: mellan databaser

Postades av 2003-03-20 23:22:13 - Jan Bulér

Jag kopierade exemplet direkt från MSDN, tänkte inte på att de använde ett recordset istället för en connection.

//
Janne


Svara

Sv: mellan databaser

Postades av 2003-03-20 23:26:06 - Jan Bulér

Jag förstår inte riktigt vad som är ditt problem, i ett inlägg säger du

"Jo det var ett bra sätt..

Men det är lite mera ändringar mellan den gamla
och den nya databasen.."

och i nästa inlägg

"jag vill bara flytta från db1 till db2"

Vad är det egentligen du vill göra? Du har fått exempel på hur du kan förändra databasen/tabellerna med SQL och du har fått exempel på hur du flyttar/kopierar data från en tabell till en annan.

//

Janne


Svara

Sv: mellan databaser

Postades av 2003-03-21 07:44:36 - Peter Granvall

Vad jag är ute efter är..

1. jag har en databas som jag använder i mitt program.
Nu har jag ökat på databasen med några fält.

2. Föra databasen så hadde jag glömt att ändra "tillåt null" så det vart lite problem med att fälten inte fick vara tomma.


Nu har jag gjort ändring i databasen så man kan ha tomma fält. vilket blir fel i den gamla databasen.

men då kan man inte ha den gamla databasen i den nya versionen på programet för då fungerar inte programet (se.2)

Bara för att inte behöva lägga i allt igen så försöker jag hitta en "kopy funktion" mellan 2st databaser

Så jag kan flytta data från db1 (gamla) till db2 (den nya).

Hoppas det förklarar bättre vad jag menar


Svara

Sv: mellan databaser

Postades av 2003-03-21 09:17:30 - Peter Björklund

Då kan du göra som jag skriver i mitt inlägg här ovanför.

Skapa två connectionobjekt. Ett för db1 och ett för db2.

Skapa sedan ett recordset dit du SELECTERAR ut all data ur db1 från.

Skriv sedan INSERTsatsen som lägger ner datan i db2 från recordset.

Vid Insertsatsen kan du jobba direkt mot connectionobjektet och använda Execute före själva SQL satsen.

conObj2.Execute "INSERT..."


Svara

Sv: mellan databaser

Postades av 2003-03-21 09:55:59 - Peter Granvall

oki..

Detta är lite nytt område, skulle du kunna visa hur jag gör det..


Svara

Sv: mellan databaser

Postades av 2003-03-21 10:20:54 - Peter Björklund

Jag utgår ifrån att du kör en Accessbas

Dim objCon1 As ADODB.Connection
Dim objCon2 As ADODB.Connection
Dim objRS As ADODB.Recordset

Dim dbNamn1 As String
Dim dbNamn2 As String

Private Form_Load()
Set objCon1 = New ADODB.Connection
Set objCon2 = New ADODB.Connection
Set objRS = New ADODB.Recordset

dbNamn1 = "Namnet_på_din_gamla_databas"
dbNamn2 = "Namnet_på_din_nya_databas"

objCon1.Open "Provider=Microsoft.Jet.OLEDB.3.51;datasource= " & dbNamn1
objCon2.Open "Provider=Microsoft.Jet.OLEDB.3.51;datasource= " & dbNamn2
objRS.Open "SELECT * FROM dinTabelliDB1", objCon1, adOpenDynamic,adLockBatchOptimistic, adCmdText

objCon2.Execute "INSERT INTO dinTabelliDB2(Fält1,Fält2,Fält3)VALUES('" & objRS("Fält1") & "','" & objRS("Fält2") & "','" & objRS("Fält3") & "')"

objCon1.Close
Set objCon1 = Nothing
objCon2.Close
Set objCon2 = Nothing
objRS.Close
Set objRS = Nothing

'Nu borde din data vara överflyttat till db2
'Du måste själv avgöra vilka fält i dina databaser som är giltiga
'Det har ju jag ingen aning om
'Därför får du modifiera vilka fält som skall hämtas ur db1 och vilka fält som skall tilldelas ur objRS till db2.
'Du kanske också måste modifiera Providern beroende på vilken version du kör. Du kankse kör 4.0?

'Lycka till
End Sub





Svara

Sv: mellan databaser

Postades av 2003-03-21 11:27:00 - Peter Granvall

Får fel på följande fält


<code>
objCon1.Open "Provider=Microsoft.Jet.OLEDB.3.51;datasource= " & dbNamn1
</code>


Svara

Sv: mellan databaser

Postades av 2003-03-21 22:09:04 - Peter Björklund

Hur lyder felet??

Prova förresten med att slå isär ordet datasource till Data Source istället.

Har skrivit fel där!!

Om din databas ligger i samma katalog med din VB filer räcker det med att skriva endast namnet på basen. Om inte så är det hela sökvägen fram till din databas som gäller i namnet för dbNamn1 resp. dbNamn2.


Svara

Sv: mellan databaser

Postades av 2003-03-24 07:43:12 - Peter Granvall

Nu fungerar det nästan..

Han kopierar ändast första posten varje gång man startar programet
resten av posterna hoppar han över...


Svara

Sv: mellan databaser

Postades av 2003-03-24 11:53:40 - Peter Björklund

Det har du rätt i.

Hu r kunde jag glömma det???

Du få sätta en loop runt INSERT satsen. En loop som körs ända tills dess att recordset är tomt.

Do While Not objRS.EOF
objCon2.Execute "INSERT INTO dinTabelliDB2(Fält1,Fält2,Fält3)VALUES('" & objRS("Fält1") & "','" & objRS("Fält2") & "','" & objRS("Fält3") & "')"
objRS.MoveNext
Loop

Prova detta.


Svara

Sv: mellan databaser

Postades av 2003-03-24 12:51:40 - Peter Granvall

Funkade fint..

Tackar så mycket men en liten fråga till..
så här har jag gjort


<code>
'Läser mdb filen till ex textruta
Private Sub Command1_Click()
CommonDialog1.InitDir = App.Path
CommonDialog1.ShowOpen
Text1.Text = CommonDialog1.FileName
End Sub
</code>

typ

<code>
'hämtar databaserna till textrutan
dbNamn1 = text1.text
dbNamn1 = text2.text
</code>

funkade fint..

Men det finns ingen kontroll över ifall han har flyttat datan och hur hindrar man
vb från att lägga in samma flera gånger

koppla en ProgressBar som talar om att datan är flyttad..
och även hindrar samma data att flyttas 2ggr eller mer..
har kommit dit men hur hindrar man vb från att lägga in samma poster flera ggr??
och hur kopplar man en ProgressBar..


Svara

Sv: mellan databaser

Postades av 2003-03-24 14:36:55 - Peter Björklund

Men det finns ingen kontroll över ifall han har flyttat datan och hur hindrar man
vb från att lägga in samma flera gånger

Min lösning var inte avsedd som den slutgiltiga lösningen. Som jag fattade det så var det en engångsflytt som var aktuell. Data från den gamla db1 skulle över till den nya db2.

Om det är tänkt att man också vill använda programmet fler ggr och vill kontrollera om posterna redan finns i db så kan man ju enkelt SELECTERA ut datan ur db och jämföra den datan med datan från vilken input man nu använder.

Jämför det hela med en villkorsats isåfall.

If data = data Then
UPDATE.....
Else
INSERT....
End If

...eller om update överhuvudtaget inte är aktuell

If data = data Then
Stäng dina connectio och recordsetobjekt
Else
INSERT....
End If

Nu har du kontroll över data.



Svara

Sv: mellan databaser

Postades av 2003-03-24 15:17:37 - Peter Granvall

Men hur kopplar man
en progressbar till Recordset.
resten kan man änkelt göra med enable funktion..


Svara

Sv: mellan databaser

Postades av 2003-03-24 16:13:22 - Peter Granvall

Löste problemet med änkla medel...
För andra som funderar över samma sak så lägger jag in hela coden så ni kan titta på.

<code>
'Börjar med ett noll värde
ProgressBar1.Value = 0

Set objCon1 = New ADODB.Connection
Set objCon2 = New ADODB.Connection
Set objRS = New ADODB.Recordset

'Ändrar värdet då en del av jobbet är gjort
ProgressBar1.Value = 15

'Hämtar databasen från 2st textboxar
dbNamn1 = Text1.Text
dbNamn2 = Text2.Text

'I med att den hunnit halvägs så skriver jag 50
ProgressBar1.Value = 50

objCon1.Open "Provider = Microsoft.Jet.OLEDB.3.51;data source= " & dbNamn1
objCon2.Open "Provider=Microsoft.Jet.OLEDB.3.51;data source= " & dbNamn2
objRS.Open "SELECT * FROM tblTest", objCon1, adOpenDynamic, adLockBatchOptimistic, adCmdText

'Nu är det inte mycket kvar av jobbet så därför är 75% ganska lagom
ProgressBar1.Value = 75

Do While Not objRS.EOF
objCon2.Execute "INSERT INTO tblTest(Test1,Test2)VALUES('" & objRS("Test1") & "','" & objRS("Test2") & "')"
objRS.MoveNext
Loop

'Nu är jobbet klart så då fyller jag progressbar fullt
ProgressBar1.Value = 100

'Detta gör jag bara för att man inte ska lyckas trycka på knappen 2ggr
Command1.Enabled = False
</code>


Följande cod har jag inte skrivit själv utan den äran ska gå till
<code>
Peter
</code>

utan honom så hadde detta ej blivit möjligt


Svara

Sv: mellan databaser

Postades av 2003-03-24 17:48:07 - Andreas Hillqvist

Om du använt IN så skulle det gå mycket snabbare och mindre kod. ;o)
<code>
Set objCon = New ADODB.Connection

'Hämtar databasen från 2st textboxar
dbNamn1 = Text1.Text
dbNamn2 = Text2.Text

objCon.Open "Provider = Microsoft.Jet.OLEDB.3.51;data source= " & dbNamn2

objCon.Execute "INSERT INTO tblTest(Test1,Test2)" & vbCrLf & _
"SELECT Test1, Test2" & vbCrLf & _
"FROM tblTest IN """ & dbNamn1 & """"

objCon.Close

</code>


Svara

Sv: mellan databaser

Postades av 2003-03-25 07:17:29 - Peter Granvall

Det gick mycket bättre...

Tackar


Svara

Sv: mellan databaser

Postades av 2003-03-25 11:40:16 - Andreas Hillqvist

Det har jag försökt säga hela tiden. ;o)


Svara

Nyligen

  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo
  • 14:25 Tips på verktyg för att skapa QR-k
  • 14:23 Tips på verktyg för att skapa QR-k
  • 20:52 Fungerer innskuddsbonuser egentlig

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 167
27 952
271 704
1 284
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies