SPCS API
Collapse
X
-
Hmm.. jo.. men ibland har man ju inget val.
Tänk om man räknade dyktid i hur långt bubblorna man blåst under ett dyk färdats till ytan... Undrar hur långt jag har dykt då?
Min blogg | Mina Flickr bilder | Jag på fejjan | Canonforum -
Kom ni fram till någon lösning för att importera ordrar ifrån ett websystem till era bokföringsprogram för att skapa fakturaunderlag.
Några bra förslag på alternativ till spcs? har kollat på många, men alla verkar ha stora problem med att importera dessa uppgifter!?
Hittade denna länken till mamut där man använder sie för att importera ordrar. Men har inte provat om spcs stödjer det!?
ftp://dl.mamut.com/download/mbs/doc/..._Export_se.pdf
/fredrikLast edited by turbofreddan; 2006-12-08, 16:38.Comment
-
Jag har bråkat mycket med SPCS APIet och kan bara hålla med om vad som skrivits ovan om dess funktionalitet.
Jag har skrivit alla mina metoder i C++ och det fungerar väl hyffsat. Dock saknar man ju en hel del felhantering från APIet. Varför inte slänga exceptions istället för att använda sin egen specialfelhantering?!
Min applikation fungerar så här i stora drag:
1. Anropar en server som kopplar mot SPCS APIet genom socket med PHP.
2. Servern utför önskad funktion på SPCS.
3. Servern skickar tillbaka svar till PHP genom socket
4. PHP behandlar datan på önskat sätt.
Nevyn: Det går att söka fram data på olika fält, dock lite begränsat. Du använder en metod för att sätta sorteringsordningen. Kommer inte ihåg vad den heter nu och jag är inte på jobbet så jag kan inte kolla upp det, men det finns. Kolla i din API-specifikation
turbofreddan: Jag gör på följande sätt:
1. Skapa en ny order i SPCS via APIet.
2. Fyll i relevant data (Börja med kund för att slippa problem med satta priser osv.)
Det borde räcka för att man skall kunna fakturera ordern.Comment
-
-
Nevyn:
Blev det något projekt av eller är det bara att lägga ned?
Har gjort en liten .asp sida som gör en fritextsökning och listar vilka dokument som är kopplade till resultatet av sökningen. Mycket smidigt när man letar tex serienummer på inköpta saker.
Tänk om man räknade dyktid i hur långt bubblorna man blåst under ett dyk färdats till ytan... Undrar hur långt jag har dykt då?
Min blogg | Mina Flickr bilder | Jag på fejjan | CanonforumComment
-
Anmäler intresse av att hjälpa till med ett nytt SPCS-API.
Microsoft Certified Application DeveloperComment
-
Meddelande:
Har nu lyckats klura ut hur jag skapar en faktura med SPCS API och .NET (C#).
Här kommer del av koden:
[kod]
// Öppna företag räkna ned användarlicenser
[DllImport("adk.dll", EntryPoint = "_AdkOpen@8", CharSet = CharSet.Ansi)]
public static extern ADKERROR AdkOpen(string sysPath, string ftgPath);
// Skapa en struktur
[DllImport("adk.dll", EntryPoint = "_AdkCreateData@4", CharSet = CharSet.Ansi)]
public static extern int AdkCreateData(int IDataBaseId);
// Uppdatera
[DllImport("adk.dll", EntryPoint = "_AdkUpdate@4", CharSet = CharSet.Ansi)]
public static extern ADKERROR AdkUpdate(int pDb);
//Stäng företag räkna upp användarlicenser
[DllImport("adk.dll", EntryPoint = "_AdkClose@0", CharSet = CharSet.Ansi)]
public static extern ADKERROR AdkClose();
// Radera struktur
[DllImport("adk.dll", EntryPoint = "_AdkDeleteStruct@4", CharSet = CharSet.Ansi)]
public static extern ADKERROR AdkDeleteStruct(int pDb);
// Ställ på första post i strukturen
[DllImport("adk.dll", EntryPoint = "_AdkFirst@4", CharSet = CharSet.Ansi)]
public static extern ADKERROR AdkFirst(int pDb);
// Nästa post
[DllImport("adk.dll", EntryPoint = "_AdkNext@4", CharSet = CharSet.Ansi)]
public static extern ADKERROR AdkNext(int pDb);
// Lägg till
[DllImport("adk.dll", EntryPoint = "_AdkAdd@4", CharSet = CharSet.Ansi)]
public static extern ADKERROR AdkAdd(int pDb);
// Hämta sträng
[DllImport("adk.dll", EntryPoint = "_AdkGetStr@16", CharSet = CharSet.Ansi)]
public static extern ADKERROR AdkGetStr(int pDb, int iFieldID, string ppsValue, int iLen);
// Skapa en datarad
[DllImport("adk.dll", EntryPoint = "_AdkCreateDataRow@8", CharSet = CharSet.Ansi)]
public static extern int AdkCreateDataRow(int IDataBaseId, int iNumber);
// Hämta en datarad
[DllImport("adk.dll", EntryPoint = "_AdkGetDataRow@8", CharSet = CharSet.Ansi)]
public static extern int AdkGetDataRow(int pDB, int iIndex);
//Hämta en feltext
[DllImport("adk.dll", EntryPoint = "_AdkGetErrorText@16", CharSet = CharSet.Ansi)]
unsafe public static extern ADKERROR AdkGetErrorText(int err, int nErrorTextType, [MarshalAs(UnmanagedType.LPStr)]ref StringBuilder achBuf, int ILen);
[DllImport("adk.dll", EntryPoint = "_AdkSetDouble@16", ExactSpelling = true, CharSet = CharSet.Ansi, SetLastError = true)]
unsafe public static extern ADKERROR AdkSetDouble(int pDb, int iFieldId, double dValue);
[DllImport("adk.dll", EntryPoint = "_AdkDeleteRow@8", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
unsafe public static extern ADKERROR AdkDeleteRow(int pDb, int iIx);
// AdkSetStr
[System.Runtime.InteropServices.DllImport("adk.dll", EntryPoint = "_AdkSetStr@12", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
public static extern ADKERROR AdkSetStr(int pDb, int iFieldId, string pValue);
[DllImport("adk.dll", EntryPoint = "_AdkSetData@12", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
unsafe public static extern ADKERROR AdkSetData(int pDb, int iIx, int pDataRow);
public struct ADKERROR
{
public int lRc;
public int lDbTable;
public int lField;
public int lFunction;
public int lProgramPart;
}
private void button1_Click(object sender, EventArgs e)
{
string ftgpath = "C:\\Program Files\\SPCS\\SPCS Administration\\Ovnbol";
string syspath = "C:\\Program Files\\SPCS\\SPCS Administration";
ADKERROR err = new ADKERROR();
err = AdkOpen(syspath, ftgpath);
if (err.lRc != 0)
{
textBox1.Text = "Fel vid öppning av SPCS";
}
else
{
textBox1.Text = "Spcs öppnade " + ftgpath;
}
int pData;
pData = AdkCreateData(ADK_DB_INVOICE_HEAD);
textBox1.Text += "\r\n" + pData.ToString();
err = AdkSetStr(pData, ADK_OOI_HEAD_CUSTOMER_NUMBER, "104");
err = AdkSetStr(pData, ADK_OOI_HEAD_TYPE_OF_INVOICE, "F");
int pDataRow;
pDataRow = AdkCreateDataRow(ADK_DB_INVOICE_ROW, 1);
int pDataTemp;
pDataTemp = AdkGetDataRow(pDataRow, 0);
err = AdkSetStr(pDataTemp, ADK_OOI_ROW_ARTICLE_NUMBER, "112");
err = AdkSetDouble(pDataTemp, ADK_OOI_ROW_QUANTITY2, 40);
err = AdkSetDouble(pDataTemp, ADK_OOI_ROW_QUANTITY1, 40);
err = AdkSetData(pData, ADK_OOI_HEAD_ROWS, pDataRow);
err = AdkSetDouble(pData, ADK_OOI_HEAD_NROWS, 1);
err = AdkAdd(pData);
err = AdkDeleteStruct(pData);
}
[/kod]
Skam den som ger sig... Eller Trägen vinner
Ja ja kanske inte den snyggaste lösningen, men det fungerar. Felhantering och sådant ska naturligtvis till. Men så här långt fungerar det iaf.
Tänk om man räknade dyktid i hur långt bubblorna man blåst under ett dyk färdats till ytan... Undrar hur långt jag har dykt då?
Min blogg | Mina Flickr bilder | Jag på fejjan | CanonforumComment
-
Hej alla (första posten),
Jag har fått till något motsvarande. Det fungerar fint ända tills jag ska hämta ut en feltext. Jag får accessviolation exception då. Utan pardon. Min egen variant ser ut så här
public static extern ADKERROR AdkGetErrorText([MarshalAs(UnmanagedType.Struct)]ADKERROR err, int nErrorTextType, ref string achBuf, int ILen);
Den fungerar inte, och det gör dessvärre inte Zaimans heller. Samma fel då också...
Jag antar att det har med ADKERROR att göra, men å andra sidan fungerar det inte (för mig) att köra med en int, som Zaiman gör. Någon som har nåt förslag? Får jag det att fungera kan jag posta min kod här.
Originally posted by ZaimanMeddelande:
Har nu lyckats klura ut hur jag skapar en faktura med SPCS API och .NET (C#).
Här kommer del av koden:
[kod]
// Öppna företag räkna ned användarlicenser
[DllImport("adk.dll", EntryPoint = "_AdkOpen@8", CharSet = CharSet.Ansi)]
public static extern ADKERROR AdkOpen(string sysPath, string ftgPath);
// Skapa en struktur
[DllImport("adk.dll", EntryPoint = "_AdkCreateData@4", CharSet = CharSet.Ansi)]
public static extern int AdkCreateData(int IDataBaseId);
// Uppdatera
[DllImport("adk.dll", EntryPoint = "_AdkUpdate@4", CharSet = CharSet.Ansi)]
public static extern ADKERROR AdkUpdate(int pDb);
//Stäng företag räkna upp användarlicenser
[DllImport("adk.dll", EntryPoint = "_AdkClose@0", CharSet = CharSet.Ansi)]
public static extern ADKERROR AdkClose();
// Radera struktur
[DllImport("adk.dll", EntryPoint = "_AdkDeleteStruct@4", CharSet = CharSet.Ansi)]
public static extern ADKERROR AdkDeleteStruct(int pDb);
// Ställ på första post i strukturen
[DllImport("adk.dll", EntryPoint = "_AdkFirst@4", CharSet = CharSet.Ansi)]
public static extern ADKERROR AdkFirst(int pDb);
// Nästa post
[DllImport("adk.dll", EntryPoint = "_AdkNext@4", CharSet = CharSet.Ansi)]
public static extern ADKERROR AdkNext(int pDb);
// Lägg till
[DllImport("adk.dll", EntryPoint = "_AdkAdd@4", CharSet = CharSet.Ansi)]
public static extern ADKERROR AdkAdd(int pDb);
// Hämta sträng
[DllImport("adk.dll", EntryPoint = "_AdkGetStr@16", CharSet = CharSet.Ansi)]
public static extern ADKERROR AdkGetStr(int pDb, int iFieldID, string ppsValue, int iLen);
// Skapa en datarad
[DllImport("adk.dll", EntryPoint = "_AdkCreateDataRow@8", CharSet = CharSet.Ansi)]
public static extern int AdkCreateDataRow(int IDataBaseId, int iNumber);
// Hämta en datarad
[DllImport("adk.dll", EntryPoint = "_AdkGetDataRow@8", CharSet = CharSet.Ansi)]
public static extern int AdkGetDataRow(int pDB, int iIndex);
//Hämta en feltext
[DllImport("adk.dll", EntryPoint = "_AdkGetErrorText@16", CharSet = CharSet.Ansi)]
unsafe public static extern ADKERROR AdkGetErrorText(int err, int nErrorTextType, [MarshalAs(UnmanagedType.LPStr)]ref StringBuilder achBuf, int ILen);
[DllImport("adk.dll", EntryPoint = "_AdkSetDouble@16", ExactSpelling = true, CharSet = CharSet.Ansi, SetLastError = true)]
unsafe public static extern ADKERROR AdkSetDouble(int pDb, int iFieldId, double dValue);
[DllImport("adk.dll", EntryPoint = "_AdkDeleteRow@8", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
unsafe public static extern ADKERROR AdkDeleteRow(int pDb, int iIx);
// AdkSetStr
[System.Runtime.InteropServices.DllImport("adk.dll", EntryPoint = "_AdkSetStr@12", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
public static extern ADKERROR AdkSetStr(int pDb, int iFieldId, string pValue);
[DllImport("adk.dll", EntryPoint = "_AdkSetData@12", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)]
unsafe public static extern ADKERROR AdkSetData(int pDb, int iIx, int pDataRow);
public struct ADKERROR
{
public int lRc;
public int lDbTable;
public int lField;
public int lFunction;
public int lProgramPart;
}
private void button1_Click(object sender, EventArgs e)
{
string ftgpath = "C:\\Program Files\\SPCS\\SPCS Administration\\Ovnbol";
string syspath = "C:\\Program Files\\SPCS\\SPCS Administration";
ADKERROR err = new ADKERROR();
err = AdkOpen(syspath, ftgpath);
if (err.lRc != 0)
{
textBox1.Text = "Fel vid öppning av SPCS";
}
else
{
textBox1.Text = "Spcs öppnade " + ftgpath;
}
int pData;
pData = AdkCreateData(ADK_DB_INVOICE_HEAD);
textBox1.Text += "\r\n" + pData.ToString();
err = AdkSetStr(pData, ADK_OOI_HEAD_CUSTOMER_NUMBER, "104");
err = AdkSetStr(pData, ADK_OOI_HEAD_TYPE_OF_INVOICE, "F");
int pDataRow;
pDataRow = AdkCreateDataRow(ADK_DB_INVOICE_ROW, 1);
int pDataTemp;
pDataTemp = AdkGetDataRow(pDataRow, 0);
err = AdkSetStr(pDataTemp, ADK_OOI_ROW_ARTICLE_NUMBER, "112");
err = AdkSetDouble(pDataTemp, ADK_OOI_ROW_QUANTITY2, 40);
err = AdkSetDouble(pDataTemp, ADK_OOI_ROW_QUANTITY1, 40);
err = AdkSetData(pData, ADK_OOI_HEAD_ROWS, pDataRow);
err = AdkSetDouble(pData, ADK_OOI_HEAD_NROWS, 1);
err = AdkAdd(pData);
err = AdkDeleteStruct(pData);
}
[/kod]
Skam den som ger sig... Eller Trägen vinner
Ja ja kanske inte den snyggaste lösningen, men det fungerar. Felhantering och sådant ska naturligtvis till. Men så här långt fungerar det iaf.Comment
-
Hej alla, såg att någon svarat mitt gamla inlägg, nästan glömt bort den här tråden, jag bytte iallafall till vismaxor istället, funkar kanon. Där kan jag pilla i databasen som jag vill
Comment
-
ashen:
Välkommen till webforum.
Om du får din ADKERROR att fungera med att få ut feltext kan du väl meddela antingen här eller mig direkt. Har inte fått allt att fungera heller än. Bara lyckats skapa faktura eller order så här långt.
Tänk om man räknade dyktid i hur långt bubblorna man blåst under ett dyk färdats till ytan... Undrar hur långt jag har dykt då?
Min blogg | Mina Flickr bilder | Jag på fejjan | CanonforumComment
-
Zaiman,
Jag fick det att fungera tillslut. Det visade sig att jag hade fel returtyp. När jag deklarerade den som void så fungerade det galant (kunde ta bort [MarshalAs... biten också).
[Edit]
Glömde skriva att ADKERROR-parametern måste vara "ref" också
[/Edit]Comment
-
ashen
Nice.. Nu får man en vettigare felhantering.
All kod som jag postade tidigare var inte korrekt men den gav ett hum om hur jag gjort. Ska korrigera den när det mesta är klart.
Har du lust får du gärna dela med dig av dina lösningar..
Tänk om man räknade dyktid i hur långt bubblorna man blåst under ett dyk färdats till ytan... Undrar hur långt jag har dykt då?
Min blogg | Mina Flickr bilder | Jag på fejjan | CanonforumComment
-
Nu har dock AdkClose börjat strula. Fram till dess fungerar allt, men när jag kör AdkClose får jag AccessViolation Exception. Får se om jag får till det. Här är min kod iaf.
[EDIT]
Det är bara när jag lekt med fakturor (som har rader) som adkClose inte fungerar. Kanske är någon struktur jag missat att ta bort eller så. Om jag lägger till en faktura utan rader fungerar det felfritt
[/EDIT]
[EDIT]
Ytterligare uppdatering. Det är när jag försöker lägga till artikelrader som det blir fel. Om artikeln finns så läggs fakturan till, men AdkClose() kastar exception. Om artikeln inte finns får jag exception redan vid AdkAdd(). Det blir också fel om fakturan redan finns (AdkClose() kastar exception då).
Koden för att kontrollera om artikeln finns är exakt samma som jag använder för kunder, men där fungerar det alltid... Antagligen är det något jag missar att sätta eller ta bort... Ska ringa Visma imorrn och fråga om de kan veta vad det beror på.
[/EDIT]
Code:// Öppna företag räkna ned användarlicenser [DllImport("adk.dll", EntryPoint = "_AdkOpen@8", CharSet = CharSet.Ansi)] public static extern ADKERROR AdkOpen(string sysPath, string ftgPath); //Stäng företag räkna upp användarlicenser [DllImport("adk.dll", EntryPoint = "_AdkClose@0", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)] public static extern int AdkClose(); // Skapa en struktur [DllImport("adk.dll", EntryPoint = "_AdkCreateData@4", CharSet = CharSet.Ansi)] public static extern int AdkCreateData(int IDataBaseId); // Uppdatera [DllImport("adk.dll", EntryPoint = "_AdkUpdate@4", CharSet = CharSet.Ansi)] public static extern ADKERROR AdkUpdate(int pDb); //Återställ struktur [DllImport("adk.dll", EntryPoint = "_AdkResetStruct@4", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)] public static extern ADKERROR AdkResetStruct(int pDb); // Radera struktur [DllImport("adk.dll", EntryPoint = "_AdkDeleteStruct@4", CharSet = CharSet.Ansi)] public static extern ADKERROR AdkDeleteStruct(int pDb); // Radera [DllImport("adk.dll", EntryPoint = "_AdkDelete@4", CharSet = CharSet.Ansi)] public static extern ADKERROR AdkDelete(int pDb); // Radera rad [DllImport("adk.dll", EntryPoint = "_AdkDeleteRow@8", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)] public static extern ADKERROR AdkDeleteRow(int pDb, int iIx); // Skapa en datarad [DllImport("adk.dll", EntryPoint = "_AdkCreateDataRow@8", CharSet = CharSet.Ansi)] public static extern int AdkCreateDataRow(int IDataBaseId, int iNumber); // Hämta en datarad [DllImport("adk.dll", EntryPoint = "_AdkGetDataRow@8", CharSet = CharSet.Ansi)] public static extern int AdkGetDataRow(int pDB, int iIndex); // Ställ på första post i strukturen [DllImport("adk.dll", EntryPoint = "_AdkFirst@4", CharSet = CharSet.Ansi)] public static extern ADKERROR AdkFirst(int pDb); // Nästa post [DllImport("adk.dll", EntryPoint = "_AdkNext@4", CharSet = CharSet.Ansi)] public static extern ADKERROR AdkNext(int pDb); //Föregående post [DllImport("adk.dll", EntryPoint = "_AdkPrevious@4", CharSet = CharSet.Ansi)] public static extern ADKERROR AdkPrevious(int pDb); //Ställ på sista post i strukturen [DllImport("adk.dll", EntryPoint = "_AdkLast@4", CharSet = CharSet.Ansi)] public static extern ADKERROR AdkLast(int pDb); //Sök upp en post [DllImport("adk.dll", EntryPoint = "_AdkFind@4", CharSet = CharSet.Ansi)] public static extern ADKERROR AdkFind(int pDb); // Lägg till [DllImport("adk.dll", EntryPoint = "_AdkAdd@4", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)] public static extern ADKERROR AdkAdd(int pDb); // Hämta bool [DllImport("adk.dll", EntryPoint = "_AdkGetBool@12", CharSet = CharSet.Ansi)] public static extern ADKERROR AdkGetBool(int pDb, int iFieldID, ref int pbValue); // Hämta double [DllImport("adk.dll", EntryPoint = "_AdkGetDouble@12", CharSet = CharSet.Ansi)] public static extern ADKERROR AdkGetDouble(int pDb, int iFieldID, ref double pdValue); public static double SPCSGetDouble(int pDb, int iFieldID) { double res = 0; SPCSTry(AdkGetDouble(pDb, iFieldID, ref res)); return res; } // Hämta sträng [DllImport("adk.dll", EntryPoint = "_AdkGetStr@16", CharSet = CharSet.Ansi)] public static extern ADKERROR AdkGetStr(int pDb, int iFieldID, ref string ppsValue, int iLen); public static string SPCSGetStr(int pDb, int iFieldID) { string result = string.Empty; SPCSTry(AdkGetStr(pDb, iFieldID, ref result, 256)); return result; } //Hämta datum [DllImport("adk.dll", EntryPoint = "_AdkGetDate@12", CharSet = CharSet.Ansi)] public static extern ADKERROR AdkGetDate(int pDb, int iFieldID, ref int pdaValue); //Hämta data [DllImport("adk.dll", EntryPoint = "_AdkGetData@16", CharSet = CharSet.Ansi)] public static extern ADKERROR AdkGetData(int pDb, int iFieldID, int iIndex, ref int pDbRow); //Hämta decimaler [DllImport("adk.dll", EntryPoint = "_AdkGetDecimals@12", CharSet = CharSet.Ansi)] public static extern ADKERROR AdkGetDecimals(int pDb, int iFieldID, ref int iDec); //Hämta en feltext, behöver ev. vara unsafe [DllImport("adk.dll", EntryPoint = "_AdkGetErrorText@16", CharSet = CharSet.Ansi)] public static extern void AdkGetErrorText(ref ADKERROR err, int nErrorTextType, ref string achBuf, int ILen); //AdkSetBool [DllImport("adk.dll", EntryPoint = "_AdkSetBool@12", ExactSpelling = true, CharSet = CharSet.Ansi, SetLastError = true)] public static extern ADKERROR AdkSetBool(int pDb, int iFieldId, int bValue); //AdkSetDouble [DllImport("adk.dll", EntryPoint = "_AdkSetDouble@16", ExactSpelling = true, CharSet = CharSet.Ansi, SetLastError = true)] public static extern ADKERROR AdkSetDouble(int pDb, int iFieldId, double dValue); // AdkSetStr [DllImport("adk.dll", EntryPoint = "_AdkSetStr@12", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)] public static extern ADKERROR AdkSetStr(int pDb, int iFieldId, string pValue); [DllImport("adk.dll", EntryPoint = "_AdkSetDate@12", ExactSpelling = true, CharSet = CharSet.Ansi, SetLastError = true)] public static extern ADKERROR AdkSetDate(int pDb, int iFieldId, int lValue); //AdkSetData [DllImport("adk.dll", EntryPoint = "_AdkSetData@12", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)] public static extern ADKERROR AdkSetData(int pDb, int iIx, int pDataRow); [DllImport("adk.dll", EntryPoint = "_AdkIsReadWrite@8", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)] public static extern bool AdkIsReadWrite(int pDb, int iFieldId); [DllImport("adk.dll", EntryPoint = "_AdkLongToDate@12", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)] public static extern ADKERROR AdkLongToDate(int lValue, ref string _ppsValue, int Ilen); [DllImport("adk.dll", EntryPoint = "_AdkDateToLong@8", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)] public static extern ADKERROR AdkDateToLong(string sValue, ref int plValue); public static int SPCSDateToLong(DateTime date) { int ldate = 0; SPCSTry(AdkDateToLong(date.ToString(), ref ldate)); return ldate; } [DllImport("adk.dll", EntryPoint = "_AdkGetType@12", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)] public static extern ADKERROR AdkGetType(int pDb, int iFieldId, ref ADK_FIELD_TYPE pType); [DllImport("adk.dll", EntryPoint = "_AdkGetLength@12", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)] public static extern ADKERROR AdkGetLength(int pDb, int iFieldId, ref int iLength); [DllImport("adk.dll", EntryPoint = "_AdkSetSortOrder@8", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)] public static extern ADKERROR AdkSetSortOrder(int pDb, ADK_SORT_ORDER iFieldId); [DllImport("adk.dll", EntryPoint = "_AdkGetFieldName@16", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Ansi, SetLastError = true)] public static extern ADKERROR AdkGetFieldName(int IDataBaseId, int iFieldId, ref string ppsValue, int Ilen); public static string SPCSGetError(ADKERROR error, ADK_ERROR_TEXT_TYPE errorType) { string str = string.Empty; AdkGetErrorText(ref error, (int)errorType, ref str, 256); return str; } } }Last edited by ashen; 2007-02-15, 18:21.Comment
-
Hur gick det? Fick du något vettigt svar från Visma?
Har själv inte haft tid till att pula mer med detta projekt, andra har just nu högre prioritering.
Men jag följer tråden med spänning. Kul när det går framåt.
Tänk om man räknade dyktid i hur långt bubblorna man blåst under ett dyk färdats till ytan... Undrar hur långt jag har dykt då?
Min blogg | Mina Flickr bilder | Jag på fejjan | CanonforumComment
-
Det slutade med att jag fick maila kod till dem. Får väl se om jag får ett svar under veckan
Originally posted by ZaimanHur gick det? Fick du något vettigt svar från Visma?
Har själv inte haft tid till att pula mer med detta projekt, andra har just nu högre prioritering.
Men jag följer tråden med spänning. Kul när det går framåt.Comment
Oderland
Collapse
Comment