2016-08-06 42 views
2

Ich versuche, viele ziemlich große Access-Datenbanken [ca. 20 mil Datensätze über 8 Datenbanken] in einer einzigen SQLite DB neu zu erstellen, und dann auf diese Daten in meinem Haupt-MS-Access DB [voll von Benutzer eingegeben Daten und Links zu allen großen Tabellen und so]SQLite-Datentypen für MS Access

Ich kann die großen Tabellen in SQLite einfach gut erstellen, kann Access verknüpfen, Tabellen auf, aber alle Feldtypen kommen als Memo, was natürlich nicht auf

Die Mehrzahl der Felder sitzt als Textfelder in SQLite

Jede Art und Weise verbunden werden, um sie zu vermeiden Verknüpfung als Memofelder? Also sind die meisten Felder alphanumerisch und ich gebe sie alle als Text ein, hauptsächlich als ID-Felder, die ich verlinke, sie sind alle CSV-Extrakte direkt aus Salesforce, darunter ist das kleinste, das würde alles werden normalerweise Zugriff als Textfelder importiert, in SQLite sie Import als Textfelder, sondern von SQLite Zugang verbindet, sie stoßen als Memo

Beispieldaten ist

"Id","CreatedById","CreatedDate","End_Date__c","Future_Sale_Cycle__c","IsDeleted","LastModifiedById","LastModifiedDate","LastReferencedDate","LastViewedDate","Name","OwnerId","Start_Date__c","SystemModstamp" 
"a4N900000004PXrEAM","005900000041XdPAAU","2015-05-29T06:20:07.000Z","2016-02-13","a4N6F000000L34HUAS","false","00590000003cQMIAA2","2016-02-12T00:22:23.000Z","2016-02-14T23:02:02.000Z","2016-02-14T23:02:02.000Z","YPSEL2-36","00590000003cQMIAA2","2015-02-23","2016-04-22T11:07:45.000Z" 

die Textfelder i kommen auf sind entweder 9, 12, 15 oder 18 Ziffern alphanumerisch, immer sind es immer ID-Felder, Mischungen aus Buchstaben und Zahlen

+0

Welche Textgröße haben Ihre SQLite-Felder? Wenn> 255, werden sie als Memo interpretiert. // Bei Textfeldern (anstelle von Zahlen) wird für mich ein Alarm ausgelöst, aber wenn Sie müssen, sollten diese Textfelder * klein * sein. – Andre

+0

so sind die meisten Felder alphanumerisch und ich lege sie alle als Text, da sie hauptsächlich ID-Felder sind, die ich verlinke, sie sind alle CSV-Extrakte direkt aus Salesforce, unten ist das kleinste, diese würden alle normalerweise importiert werden Zugriff als Textfelder, in SQLite kommen sie als Textfelder importieren, aber Verknüpfung von SQLite zum Zugriff, sie kommen als Memo Beispieldaten ist CreatedById, CreatedDate, End_Date__c 005900000041XdPAAU, 2015-05-29T06: 20: 07.000Z , 13/02/2016 –

+0

Das Textfeld, an dem ich mich beteilige, sind 9, 12, 15 oder 18 alphanumerische Zeichen, immer sind es ID-Felder, Buchstabenmischungen und Zahlen. –

Antwort

0

Ich habe eine Kombination MS-Access 2010 Datenbank mit verknüpften SQL-Tabellen - und erleben Sie den gleichen Effekt, den Sie tun.

Die einzige Möglichkeit, die ich umgehen konnte, ist die Erstellung von Abfragen für jede der Tabellen, die ich beitreten möchte. Für jedes Textfeld fester Länge erzeuge ich ein neues Feld mit der Funktion Left$.

Dann verwenden Sie diese Abfragen, um Verknüpfungsfelder mit Ihren regulären Access-Tabellen zu verknüpfen, anstatt direkt zu Ihren SQLITE-Tabellen beizutreten.

Also für Ihre Beispiele oben könnten Sie diese Felder auf Ihre Anfrage

LinkID: Left$([ID], 18) 
LinkCreatedByID: Left$([CreatedById], 18) 
LinkOwnerId: Left$([OwnerId], 18) 
LinkName: Left$([Name], 9) 

Hoffnung, die

1

Dies alles ein wenig verwirrend hilft hinzuzufügen ist.

Gemäß Whats the best SQLite data type for a long string hat SQLite nur einen Textdatentyp (TEXT) ohne Längenbeschränkungen.

Aber wenn ich eine Tabelle in eine neue SQLite-Datenbank mit

sqlite> create table t1 (id integer primary key, txt varchar(20)); 

und verknüpfen diese Tabelle über ODBC in Access erstellen, die txt Spalte hat den Datentyp Text(20). Und ich kann mich dieser Spalte anschließen.
TEXT Spalten auf der anderen Seite sind als Memo verknüpft.

Also: Da Sie die SQLite-Datenbank selbst erstellen, empfehle ich, die Textfelder als varchar(255) oder kleiner zu erstellen.


Aber Achtung: in meinem Beispiel Tabelle, kann ich einfügen glücklich größere Strings als 20 Zeichen:

sqlite> insert into t1 values (7, 'dings'); 
sqlite> insert into t1 values (8, 'dingsaaaaabbbbbccccc'); 
sqlite> insert into t1 values (9, 'dingsaaaaabbbbbcccccddddd'); 
sqlite> select * from t1; 
7|dings 
8|dingsaaaaabbbbbccccc 
9|dingsaaaaabbbbbcccccddddd 

Aber in Access ich nur 20 Zeichen:

id txt 
7 dings 
8 dingsaaaaabbbbbccccc 
9 dingsaaaaabbbbbccccc 

Daher meine Empfehlung varchar(255), auch wenn deine Saiten viel kleiner sein werden.